2010-12-27 20 views
21

Gibt es eine Möglichkeit, die Kernfunktionen von jQuery zu überschreiben? Sagen wir, ich wollte eine Warnung (this.length) in der Größe hinzuzufügen: function() Statt es in der Quelle der ZugabeÜberschreiben von jQuery-Funktionen

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

ich mich gefragt, ob es möglich wäre, so etwas zu tun:

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()); 
} 

Antwort

41

Sie fast hatte es, Ihnen die this Referenz innerhalb der alten size Funktion einstellen müssen die this Referenz in der Override-Funktion sein, wie folgt aus:

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); 
}; 

Wie dies funktioniert, ist Function Instanzen haben eine Methode namens apply, dessen Zweck es ist, willkürlich den inneren this Bezug zu überschreiben innerhalb des Körpers der Funktion.

So, als Beispiel:

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

Wow! Vielen Dank ! – MotionGrafika

+5

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

+0

@ Gabriel Danke für den Link! :) –

1

Sie Plugins Methode Prototyp ursprüngliche Quelldatei wie unten ohne Änderung es in einer separaten Datei überschreiben können ::

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

     // Your Code 
    }, 

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

Jetzt ist Ihre Logik setzen hier oder Originalcode mit Ihrer neuen Idee, die in Ihrem Projekt benötigt wird.