Hay atajos ya preparados (azúcar sintáctico) para el contenedor de funciones con el que respondió @CMS. (A continuación, suponiendo que el contexto que desea es this.tip
).
Si apunta a un navegador compatible con ECMA-262, 5a edición (ECMAScript 5) o Node.js , puede usarlo Function.prototype.bind
. Opcionalmente, puede pasar cualquier argumento de función para crear funciones parciales .
fun.bind(thisArg[, arg1[, arg2[, ...]]])
Nuevamente, en su caso, intente esto:
if (this.options.destroyOnHide) {
setTimeout(this.tip.destroy.bind(this.tip), 1000);
}
La misma funcionalidad también se ha implementado en Prototype (¿alguna otra biblioteca?).
Function.prototype.bind
puede implementarse de esta manera si desea compatibilidad con versiones anteriores personalizadas (pero tenga en cuenta las notas).
Para el desarrollo de vanguardia (2015) puede utilizar las funciones de flecha gruesa , que forman parte de la especificación ( ejemplos ) ECMAScript 2015 (Harmony / ES6 / ES2015 ).
Una expresión de función de flecha (también conocida como función de flecha gruesa ) tiene una sintaxis más corta en comparación con expresiones de función y enlaza léxicamente el this
valor [...].
(param1, param2, ...rest) => { statements }
En su caso, intente esto:
if (this.options.destroyOnHide) {
setTimeout(() => { this.tip.destroy(); }, 1000);
}
Si ya está utilizando jQuery 1.4+, hay una función lista para configurar explícitamente el this
contexto de una función.
jQuery.proxy () : toma una función y devuelve una nueva que siempre tendrá un contexto particular.
$.proxy(function, context[, additionalArguments])
En su caso, intente esto:
if (this.options.destroyOnHide) {
setTimeout($.proxy(this.tip.destroy, this.tip), 1000);
}
Está disponible en Underscore.js, así como lodash, como _.bind(...)
1 , 2
enlazar Vincula una función a un objeto, lo que significa que siempre que se llame a la función, el valor dethis
será el objeto. Opcionalmente, vincule argumentos a la función para completarlos previamente, también conocida como aplicación parcial.
_.bind(function, object, [*arguments])
En su caso, intente esto:
if (this.options.destroyOnHide) {
setTimeout(_.bind(this.tip.destroy, this.tip), 1000);
}
enlazar jquery underscore.js ecmascript-5 prototypejs node.js