За последние 24 часа нас посетили 20729 программистов и 982 робота. Сейчас ищут 579 программистов ...

расширения Function

Тема в разделе "JavaScript и AJAX", создана пользователем dark-demon, 28 авг 2007.

  1. dark-demon

    dark-demon Активный пользователь

    С нами с:
    16 фев 2007
    Сообщения:
    1.920
    Симпатии:
    1
    Адрес:
    леноград
    Предлагаю выкладывать расширения для объекта Function.

    вот несколько от меня:

    Код (Text):
    1. Function.prototype.observe= function (el, ev) {
    2.     ( el.addEventListener && el.addEventListener(ev, this, false) ) ||
    3.     ( el.attachEvent && el.attachEvent('on' + ev, this) ) ||
    4.     ( el['on'+ev]= this );
    5.     return this;
    6. }
    7. Function.prototype.unobserve= function (el, ev) {
    8.     ( el.removeEventListener && el.removeEventListener(ev, this, false) ) ||
    9.     ( el.detachEvent && el.detachEvent('on' + ev, this) ) ||
    10.     ( el['on'+ev]= null );
    11.     return this;
    12. }
    позволяют делать функцию обработчиком события и разделывать обратно.

    юзать так:

    Код (Text):
    1. var func= function (e) {
    2.     alert (e);
    3. };
    4. func.observe(window,'load').observe(window,'DOMContentLoaded');
     
  2. dark-demon

    dark-demon Активный пользователь

    С нами с:
    16 фев 2007
    Сообщения:
    1.920
    Симпатии:
    1
    Адрес:
    леноград
    Иногда бывает необходимо вызвать функцию, но не сразу, а с некоторой задержкой:

    Код (Text):
    1. Function.prototype.delayed= function (time) {
    2.     var func= this;
    3.     var args= [];
    4.     for (var i= 1; i<arguments.length; ++i) args.push(arguments[i]);
    5.     setTimeout( function (e) {
    6.         func.apply (func, args);
    7.     },time);
    8.     return this;
    9. }
    если без задержки было так:

    Код (Text):
    1. func(param1,param2);
    то задержка добавляется так:

    Код (Text):
    1. func.delayed(delay,param1,param2);
     
  3. dark-demon

    dark-demon Активный пользователь

    С нами с:
    16 фев 2007
    Сообщения:
    1.920
    Симпатии:
    1
    Адрес:
    леноград
    поразмыслив ещё немного я остановился на таком варианте:

    Код (Text):
    1. Function.prototype.callon= function (event, param1) {
    2.     switch (event) {
    3.         case 'timeout':
    4.             setTimeout( this, param1 );
    5.             break;
    6.         case 'each':
    7.             for ( var i=0; i<param1; ++i ) this(i);
    8.             break;
    9.         default:
    10.             var obj= param1;
    11.             obj.addEventListener && obj.addEventListener( event, this, false )
    12.             || obj.attachEvent && obj.attachEvent( 'on'+event, this );
    13.             break;
    14.     };
    15.     return this;
    16. }
    17. Function.prototype.stopcallon= function (event, obj) {
    18.     obj.removeEventListener && obj.removeEventListener( event, this, false )
    19.     || obj.detachEvent && obj.detachEvent( 'on'+event, this );
    20.     return this;
    21. }
    его использование:

    Код (Text):
    1.  
    2. var func= function () {
    3.    alert ('ping');
    4. };
    5. func.callon('load',window).callon('timeout',1000);
    или:

    Код (Text):
    1. (function(){
    2.    $alert ('ping');
    3. }).callon('load',window).callon('timeout',1000);