Tam*_*Pap 2 javascript jquery bind notify observer-pattern
var f = function() {
// Do something useful here
};
Run Code Online (Sandbox Code Playgroud)
有没有办法'观察'这个功能,并在执行时得到通知?类似于jQuery中绑定的东西,但我想绑定函数而不是dom事件?
我不想要这样的东西:
var f = function() {
// Do something useful here
notifyObserver();
};
Run Code Online (Sandbox Code Playgroud)
但是我想要这样的东西:
f.bind(function() {
alert('F was executed.');
});
Run Code Online (Sandbox Code Playgroud)
您可以使用调用notifyObserver的函数替换f:
f = (function(oldF){
return function(){
notifyObserver();
oldF();
};
})(f);
Run Code Online (Sandbox Code Playgroud)
这样你就不需要修改(旧的)f本身.bind当然,这不包括您的功能.我可能会为此创建一些管理器类,您可以在其中注册事件处理程序
manager.bind('f', function(){...});
Run Code Online (Sandbox Code Playgroud)
并且创建包装函数看起来更像
f = (function(oldF){
return function(){
manager.notify('f');
oldF();
};
})(f);
Run Code Online (Sandbox Code Playgroud)
您可以概括包装器的创建:
function wrap(methodToWrap, eventName){
return function(){
manager.notify(eventName);
return methodToWrap.apply(this, arguments);
}
}
Run Code Online (Sandbox Code Playgroud)
(这适用于任意数量的参数和返回值!)
然后做一些像:
f = wrap(f, "f");
Run Code Online (Sandbox Code Playgroud)
请参阅:http://jsfiddle.net/NBefc/2/(已更新,没有返回值)