2014-09-02 3 views
3

У меня есть несколько методов прототипа JQuery:Продлить все прототипы

$.fn.one 
$.fn.two 
$.fn.three 

Каждый из них имеет свой собственный код, и я хочу, чтобы добавить что-то к концу всех трех. Допустим console.log («done»). Это возможно?

ответ

3

Вы можете перепять имена на новые функции, которые вызывают их предыдущие воплощения, а затем вызвать console.log().

Что-то вроде:

$.each(["one", "two", "three"], function(index, name) { 
    var originalMethod = $.fn[name]; 
    $.fn[name] = function() { 
     var result = originalMethod.apply(this, arguments); 
     console.log(name + "() done."); 
     return result; 
    }; 
}); 

Если вы хотите применить это поведение для всех методов в прототипе Jquery, вы можете перебрать $.fn себя и только функции процесса:

for (var name in $.fn) { 
    // Create a new scope so 'originalMethod' is still bound to the 
    // right method by the time our new '$.fn[name]()' is invoked. 
    (function(originalMethod) { 
     if ($.isFunction(originalMethod)) { 
      $.fn[name] = function() { 
       var result = originalMethod.apply(this, arguments); 
       console.log(name + "() done."); 
       return result; 
      }; 
     } 
    })($.fn[name]); 
} 
+0

Ницца, как о способ доступа ко всем объявленным методам вместо их перечисления в массиве? –

+0

* Все * методы в прототипе jQuery? Ты уверен? –

+0

Нет просто методов, которые я объявил не встроенными. –

Смежные вопросы