Pregunta

Digamos que tengo lo siguiente definido en JavaScript:

com.company.long.namespace = {
    actions: {   
        add: {  
            defaults: {
                url: 'myurl/submit',
            },

            invoke: function () {   
                var submitUrl = this.defaults.url;                          
                com.company.long.namespace.foo.util.server.submit({
                    url: submitUrl,
                    success: function() { }
                });
            },
        }
    }
};

que luego llamo dentro del contexto de un evento de clic jQuery:

$(myElem).click(function() {
    com.company.long.namespace.actions.add.invoke();
});

Por el camino 'este' trabaja dentro de las devoluciones de llamadas de eventos jQuery, this.defaults no está definido cuando se llama desde este contexto. ¿De todos modos todavía utiliza 'esto' dentro de este alcance, sin tener que definir el espacio de nombres completo o sin usar jQuery.proxy?

¿Fue útil?

Solución

No puedes llamar add, no es una función.

Si llamas al add.invoke función, this.default es el objeto predeterminado que ha definido en el add objeto. No tienes que hacer nada especial.

Ejemplo: http://jsfiddle.net/p4j4k/

Otros consejos

Para llamar a una función con un contexto de su elección, puede usar .apply(context) (Más información sobre función.Apply y Llamada de función):

com.company.long.namespace.actions.add.invoke.apply(com.company.long.namespace.foo.util.context);

Dentro de la función de invocar this se referirá al objeto de contexto.
Mira esto ejemplo de jsfillde

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top