2012-03-20 20 views

Respuesta

5

Simplemente definiendo una función dentro del cierre (función) que pasa al $() no hace nada para ponerlo en el objeto jQuery fn. Para hacer eso, usted tiene que hacerlo de forma explícita:

$.fn.someFunc = someFunc; 

Normalmente, no podría hacer esto dentro de una devolución de llamada en $(), usted lo haría antes. Los complementos hacen esto para agregar funcionalidad, que ya debería estar presente anterior a DOM listo.

A modo de ejemplo, aquí es un poco tonto plug-in que convierte el texto en verde:

(function($) { 
    $.fn.green = green; 
    function green() { 
    return this.css("color", "green"); 
    } 
})(jQuery); 

... que se puede utilizar de DOM listo:

jQuery(function($) { 

    $(".foo").green(); 

}); 

Live example | Live source

Tenga en cuenta que la llamada proviene de una instancia de jQuery, no directamente de $.fn.

+0

Gracias por la simple explicación. – zhihong

1

Funciona someFunc no es una "función jQuery", es una función definida dentro de un controlador de eventos (jQuery) DOMContentLoaded.

No puede acceder desde fuera porque está fuera del alcance. Sólo declararlo fuera del controlador de carga, y será accesible:

$(function(){ 
    // nothing here , but you can call someFunc() if you want 
}); 

function someFunc(){ 
    /*do something*/ 
}; 

function test(){  
    someFunc(); // works! 
} 
1

En jQuery

$.fn.someFunc = myFunc; 
function myFunc() 
{ 
    // Code here 
} 

es similar a la llanura de JavaScript de

function myObj() 
{ 
    // Code here 
} 
var obj= new myObj(); 
obj.prototype.someFunc=myFunc; 
function myFunc() 
{ 
    // Code here 
} 

Es sólo una manera de añadir un nuevo propiedad a un objeto (herencia de prototipo) y fn de jquery es solo un alias del prototipo de javascript. Para llamar al método mi 'sumFunc' que he añadido anteriormente en al objeto jQuery usando

$.fn.someFunc = myFunc; 

que puedo hacer

$('someElement').someFunc(); 

y esta línea llamaré taht función y hacer algo para el 'someElement' (aunque no hice nada), espero que sea lo suficientemente claro. Mira a T.J. La respuesta de Crowder, te dará un poco más de comprensión.

+0

* "... jquery's fn es solo un alias del prototipo de JavaScript ..." * Quiere decir 'jQuery.prototype' (que también, extrañamente, hace referencia a 'jQuery.fn.init.prototype' porque jQuery usa' new jQuery.fn.init' para crear instancias). –

+0

Sí, eche un vistazo a este http://stackoverflow.com/questions/1755080/why-jquery-do-this-jquery-fn-init-prototype-jquery-fn, ¿me equivoco con lo que entiendo? –

+0

'@Sheikh Heera': No entiendo tu pregunta. Todo lo que hace el enlace es reiterar (incompletamente) lo que dije arriba. Tenga en cuenta que "javascript"! = "Jquery". –

Cuestiones relacionadas