2010-12-27 8 views
21

¿Hay forma de anular las funciones principales de jQuery? dicho que quiera añadir una alerta (this.length) de tamaño: function() En lugar de añadir en la fuenteIgnorar funciones de jQuery

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

Me preguntaba si sería posible hacer algo como esto:

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

Respuesta

41

usted casi lo tenía, lo que necesita para establecer la referencia this interior de la antigua función size a ser la referencia this en la función de anulación, así:

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

La forma en que esto funciona es Function casos tienen un método llamado apply, cuyo propósito es anular arbitrariamente el interior referencia this interior del cuerpo de la función.

Así, como ejemplo:

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

¡Guau! Gracias un montón ! – MotionGrafika

+5

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

+0

@Gabriel ¡Gracias por el enlace! :) –

1

Puede reemplazar el método de plugins prototipo en un archivo aparte, sin modificar el archivo fuente original de la siguiente manera ::

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

     // Your Code 
    }, 

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

Ahora ponga su lógica aquí o código original con su nueva idea que se necesita en su proyecto.

Cuestiones relacionadas