//http://www.dustindiaz.com/basement/javascript-observer-class.html
function Observer() {
this.fns = [];
};
Observer.prototype = {
subscribe : function(fn , scope) {
this.fns.push({fn: fn, scope: scope});
},
unsubscribe : function(fn) {
this.fns = this.fns.filter(
function(el) {
if ( el.fn !== fn ) {
return el;
}
}
);
},
fire : function(o, thisObj) {
//var scope = thisObj ;
var scope = thisObj ;//|| el.scope ;
this.fns.forEach(
function(el) {
el.fn.call( scope|| el.scope || windows, o);
}
);
}
};
原文中的subscribe()只有1参数 fn, 可以做到修改windows & trigger 2个范围的变量. 在fire(0,thisObj) 中关于scope的定义.
不能修改subscriber接收者的变量. 因此,做了一点修改, 可以修改 subscriber的内部范围的变量.
Sample: