2009-03-15 17 views
5

que estoy tratando de imitar las variables estáticas en una función de JavaScript, con la siguiente finalidad:Las variables estáticas en una función anónima

$.fn.collapsible = function() { 
    triggers = $(this).children('.collapse-trigger'); 
    jQuery.each(triggers, function() { 
    $(this).click(function() { 
     collapse = $(this).parent().find('.collapse'); 
    }) 
    }) 
} 

¿Cómo puedo guardar el objeto "colapso" por lo que no tiene que ser "encontrado" en cada llamada? Sé que con las funciones nombradas podría hacer algo como "someFunction.myvar = collapse", pero ¿qué hay de las funciones anónimas como esta?

Gracias!

Respuesta

11

Puede guardar su variable en la función, usando functioName.myVar = value o arguments.callee.myVar = value si no tiene el nombre de la función actual.

arguments.callee es la función actual que eres. En

+0

¡Funciona como un amuleto, gracias! – Ivan

0

Siempre que asigne la función a una variable como esa, debería poder acceder a ella como $.fn.collapsible, y así asignar variables como $.fn.collapsible.myvar.

+0

Eso no funcionaría porque esa no es la función a la que intento adjuntar una variable. Gracias. – Ivan

8

Para la función anónima se puede utilizar una función que devuelve una función.

Por ejemplo:

var myAnonymousFunction = (function(){ 
    var myFirstStatic = $("#anElement"); 
    var anotherStatic = true; 
    return function(param1,param2) { 
     // myFirstStatic is in scope 
     // anotherStatic also 
    } 
})(); 

debería funcionar como un encanto y estás código de inicialización segura para la estática sólo se ejecuta una vez.

+0

Estuve tentado de usar esto, pero es algo confuso para mi cerebro. Gracias de cualquier manera. – Ivan

1

Parece que se encuentra una mejor respuesta a esta pregunta elsewhere on Stack Overflow.

En resumen, puede asignar nombres de funciones anónimas sin contaminar el espacio de nombres, pero aún así permitir la referencia automática.

mything.prototype.mymethod = function myKindOfFakeName() { 
    myKindOfFakeName.called = true; 
} 
+1

Estaba a punto de responder esto. No es necesario que las expresiones de función sean anónimas. –

Cuestiones relacionadas