Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
function _addevent(el, event, fn, scope) {
var h = function(e) {
fn.call(scope, e);
}
el.attachEvent("on" + event, h);
}
var Observer = {
attach: function(object, methodName, relatedObject, relatedMethod){
if (!object[methodName].observerItems)
{
var newMethod = function(){
newMethod.savedMethod.apply(object, arguments);
for (var i = 0; i < newMethod.observerItems.length; i++)
{
var item = newMethod.observerItems[i];
item.relatedObject[item.relatedMethod].apply(item.relatedObject, arguments);
}
};
newMethod.observerItems = [];
newMethod.savedMethod = object[methodName];
object[methodName] = newMethod;
}
object[methodName].observerItems.push({ relatedObject: relatedObject, relatedMethod: relatedMethod });
},
detach: function(object, methodName, relatedObject, relatedMethod){
if (object[methodName].observerItems)
{
var items = object[methodName].observerItems;
for (var i = 0, k = 0; i < items.length; i++)
{
var item = items[i];
if (item.relatedObject != relatedObject || item.relatedMethod != relatedMethod)
items[k++] = items[i];
}
items.length = k;
if (items.length == 0)
object[methodName] = object[methodName].savedMethod;
}
}
};
Javascript. Простой Observer.