2010-12-27 16 views
21

È possibile sovrascrivere le funzioni principali di jQuery? dire che ho voluto aggiungere un avviso (this.length) in termini di dimensioni: function() Invece di aggiungere nella fonteOverride Funzioni jQuery

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

mi chiedevo se sarebbe possibile fare qualcosa del genere:

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

risposta

41

è quasi avuto, è necessario impostare il riferimento this all'interno della vecchia funzione size ad essere il riferimento this nella funzione di override, in questo modo:

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

Il modo in cui funziona è Function istanze hanno un metodo chiamato apply, il cui scopo è quello di sostituire arbitrariamente l'interno this riferimento all'interno del corpo della funzione.

Così, a titolo di esempio:

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

Wow! Grazie mille ! – MotionGrafika

+5

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

+0

@Gabriel Grazie per il link! :) –

1

È possibile ignorare il metodo plugin dal prototipo in un file separato senza modificare il file sorgente originale, come di seguito ::

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

     // Your Code 
    }, 

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

Ora mettete la vostra logica qui o codice originale con la tua nuova idea che è necessaria nel tuo progetto.