2012-02-09 19 views
5
(function ($) { 
    $.fn.test = function() { 
     console.log('works'); 
    }; 
})(jQuery); 

$(document).ready(function() { 
    var var1 = $().test(); // works 
    var var1 = $.test(); // error: $.test is not a function 
}); 

¿Es posible llamar así $.test()?

Respuesta

3

Desde aquí se puede extender el objeto en sí jQuery

(function ($) { 
    $.test = function() { 
     console.log('works'); 
    }; 
})(jQuery); 

Pero tenga en cuenta que esta función no estará disponible en jQuery.fn (lo que equivale a jQuery.prototype) y por lo tanto, no se puede acceder a través de dom nodes allí this, tampoco podría cadena ese método después o antes de otras funciones del complemento jQuery.

La razón por la cual $().test() funciona es que la función del constructor jQuery crea un nuevo objeto que está vinculado a jQuery.fn (prototipo ..).

2

Creo que esto se debe a que el objeto jQuery es realmente el constructor init. Lo que significa que $ solo representa el constructor de un objeto jQuery. Por lo tanto, la ejecución de $() crea un objeto jQuery vacío, que luego puede llamar al método prototipo test(). Para acceder al prototipo puede hacer $.fn.test();

Cuestiones relacionadas