Предлагаю выкладывать расширения для объекта Function. вот несколько от меня: Код (Text): Function.prototype.observe= function (el, ev) { ( el.addEventListener && el.addEventListener(ev, this, false) ) || ( el.attachEvent && el.attachEvent('on' + ev, this) ) || ( el['on'+ev]= this ); return this; } Function.prototype.unobserve= function (el, ev) { ( el.removeEventListener && el.removeEventListener(ev, this, false) ) || ( el.detachEvent && el.detachEvent('on' + ev, this) ) || ( el['on'+ev]= null ); return this; } позволяют делать функцию обработчиком события и разделывать обратно. юзать так: Код (Text): var func= function (e) { alert (e); }; func.observe(window,'load').observe(window,'DOMContentLoaded');
Иногда бывает необходимо вызвать функцию, но не сразу, а с некоторой задержкой: Код (Text): Function.prototype.delayed= function (time) { var func= this; var args= []; for (var i= 1; i<arguments.length; ++i) args.push(arguments[i]); setTimeout( function (e) { func.apply (func, args); },time); return this; } если без задержки было так: Код (Text): func(param1,param2); то задержка добавляется так: Код (Text): func.delayed(delay,param1,param2);
поразмыслив ещё немного я остановился на таком варианте: Код (Text): Function.prototype.callon= function (event, param1) { switch (event) { case 'timeout': setTimeout( this, param1 ); break; case 'each': for ( var i=0; i<param1; ++i ) this(i); break; default: var obj= param1; obj.addEventListener && obj.addEventListener( event, this, false ) || obj.attachEvent && obj.attachEvent( 'on'+event, this ); break; }; return this; } Function.prototype.stopcallon= function (event, obj) { obj.removeEventListener && obj.removeEventListener( event, this, false ) || obj.detachEvent && obj.detachEvent( 'on'+event, this ); return this; } его использование: Код (Text): var func= function () { alert ('ping'); }; func.callon('load',window).callon('timeout',1000); или: Код (Text): (function(){ $alert ('ping'); }).callon('load',window).callon('timeout',1000);