Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Function.prototype.subscribe = function(observable) {
observable.observers.push(observer); // <- observer не определен
return this;
}чтобы заработал крайний пример
for (var i in this.observers) — дурной тон.element.addEvent( 'click', object.method, object );
addEvent( String event, Function callback[, Object context = null] );
function myClass {
this.listeners = new Array();
this.args = new Array();
this.objs = new Array();//Объекты, которые будет играть роль объекта this в функции
}
myClass.prototype.addListener = function (func, arg, obj) {
this.listeners.push(func);
this.objs.push(obj);
this.args.push(arg);
}
myClass.prototype.funcEvent = function () {
//тут чего-то делаем
...
//вызываем слушателей:
for (var i = 0; i < this.listeners.length; i++) {
this.listeners[i].apply(this.objs[i], this.args[i]);
}
}
//В коде
var o = new MyClass();
//Делаем подписки
o.addListener(func1, ['arg1', 'arg2']);
o.addListener(func2, ['arg1', 'arg2'], obj);
...
o.funcEvent();
func1 () {
...
}
func2 () {
...
}
Паттерн «Обозреватель» и контекст вызова в Javascript