Ok, então escrevi um pequeno sistema de gancho / plug-in para Javascript, pois precisava ter uma classe base na qual outros desenvolvedores poderiam ligar suas funções antes de executar outra funcionalidade.
Aqui está o que eu tenho:
var ClassName = function(){
//Construct Stuff
}
ClassName.prototype.hooks = new Array();
ClassName.prototype.setHook = function( hook, args ){
// {Hook Name : { Func: args }}
InstanceOfClass.hooks.push({'hook': hook, 'args': args});
}
ClassName.prototype.getHook = function( hook ){
var hookArray = InstanceOfClass.getHooks();
for( var i in hookArray ){
if( hookArray[i].hook == hook ){
var argsKeys = Object.keys(hookArray[i].args);
return InstanceOfClass[argsKeys[0]].apply(ClassName, hookArray[i].args);
}
}
return null;
}
ClassName.prototype.getHooks = function(){
return InstanceOfClass.hooks;
}
Uso:
ClassName.prototype.preMethod = function(){
var InstanceOfClass = new ClassName();
InstanceOfClass.setHook('MY_HOOK', {'SomeOtherMethod', [params]});
}
ClassName.prototype.myMethod = function(){
var InstanceOfClass = new ClassName();
// Will fire off the method by hook
InstanceOfClass.getHook('MY_HOOK');
}
Lembre-se de que minhas habilidades em JavaScript são muito fracas e pode haver maneiras melhores de fazer isso, mas eu realmente não consegui descobrir mais nada.
Deixe-me saber o que você acha ou quaisquer melhorias que você faria.