2010-12-27 17 views
21

Czy istnieje sposób na zastąpienie podstawowych funkcji jQuery? Say chciałem dodać alert (this.length) w rozmiarze: function() Zamiast dodawać go w źródleZastępowanie funkcji jQuery

size: function() { 
    alert(this.length) 
    return this.length; 
}, 

Zastanawiałem się, czy byłoby możliwe, aby zrobić coś takiego:

if (console) 
{ 
    console.log("Size of div = " + $("div").size()); 
    var oSize = jQuery.fn.size; 
    jQuery.fn.size = function() 
    { 
     alert(this.length); 

     // Now go back to jQuery's original size() 
     return oSize(this);   
    } 
    console.log("Size of div = " + $("div").size()); 
} 

Odpowiedz

41

ty prawie gdyby trzeba ustawić odwołanie wewnątrz starego size funkcji this być odniesienie w funkcji nadpisywania this, tak:

var oSize = jQuery.fn.size; 
jQuery.fn.size = function() { 
    alert(this.length); 

    // Now go back to jQuery's original size() 
    return oSize.apply(this, arguments); 
}; 

Sposób ten działa jest Function przypadki mają metody nazywanej apply, którego celem jest dowolnie zastąpić wewnętrzną this odniesienia wewnątrz ciała funkcji.

Tak, jako przykład:

var f = function() { console.log(this); } 
f.apply("Hello World", null); //prints "Hello World" to the console 
+0

Wow! Wielkie dzięki ! – MotionGrafika

+5

http://paulirish.com/2010/duck-punching-with-jquery/ – Gabriel

+0

@Gabriel Dzięki za link! :) –

1

można przesłonić metodę wtyczek prototypu go w oddzielnym pliku bez modyfikowania oryginalnego pliku źródłowego jak poniżej ::

(function ($) { 
    $.ui.draggable.prototype._mouseDrag = function(event, noPropagation) { 

     // Your Code 
    }, 

    $.ui.resizable.prototype._mouseDrag = function(event) { 
      // Your code 
    } 
}(jQuery)); 

Teraz umieścić tu swoją logikę lub oryginalny kod z nowym pomysłem, który jest potrzebny w twoim projekcie.

Powiązane problemy