Contexto de objeto de 'esto' dentro de un evento jQuery
-
28-10-2019 - |
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?
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