Existem atalhos prontos (açúcar sintático) para o wrapper de função @CMS respondido. (Abaixo, assumindo que o contexto que você deseja é this.tip
.)
Se você segmentar um navegador compatível com ECMA-262, 5ª edição (ECMAScript 5) ou Node.js , poderá usar Function.prototype.bind
. Opcionalmente, você pode transmitir qualquer argumento de função para criar funções parciais .
fun.bind(thisArg[, arg1[, arg2[, ...]]])
Novamente, no seu caso, tente o seguinte:
if (this.options.destroyOnHide) {
setTimeout(this.tip.destroy.bind(this.tip), 1000);
}
A mesma funcionalidade também foi implementada no Prototype (outras bibliotecas?).
Function.prototype.bind
pode ser implementado assim se você desejar compatibilidade com versões anteriores personalizadas (mas observe as notas).
Para o desenvolvimento de ponta (2015), você pode usar as funções de seta gorda , que fazem parte da especificação do ECMAScript 2015 (Harmony / ES6 / ES2015) ( exemplos ).
Uma expressão de função de seta (também conhecida como função de seta gorda ) possui uma sintaxe mais curta em comparação com as expressões de função e vincula lexicamente o this
valor [...].
(param1, param2, ...rest) => { statements }
No seu caso, tente o seguinte:
if (this.options.destroyOnHide) {
setTimeout(() => { this.tip.destroy(); }, 1000);
}
Se você já usa o jQuery 1.4+, existe uma função pronta para definir explicitamente o this
contexto de uma função.
jQuery.proxy () : assume uma função e retorna uma nova que sempre terá um contexto específico.
$.proxy(function, context[, additionalArguments])
No seu caso, tente o seguinte:
if (this.options.destroyOnHide) {
setTimeout($.proxy(this.tip.destroy, this.tip), 1000);
}
Está disponível no Underscore.js, bem como no lodash, como _.bind(...)
1 , 2
bind Liga uma função a um objeto, o que significa que sempre que a função é chamada, o valor dethis
será o objeto. Opcionalmente, vincule argumentos à função para preenchê-los previamente, também conhecido como aplicativo parcial.
_.bind(function, object, [*arguments])
No seu caso, tente o seguinte:
if (this.options.destroyOnHide) {
setTimeout(_.bind(this.tip.destroy, this.tip), 1000);
}
ligar jquery underscore.js ecmascript-5 prototypejs node.js