Esistono scorciatoie già pronte (zucchero sintattico) con cui ha risposto il wrapper funzione @CMS. (Di seguito supponiamo che il contesto desiderato sia this.tip
.)
Se scegli come target un browser compatibile con ECMA-262, 5a edizione (ECMAScript 5) o Node.js , potresti utilizzare Function.prototype.bind
. È possibile facoltativamente passare qualsiasi argomento di funzione per creare funzioni parziali .
fun.bind(thisArg[, arg1[, arg2[, ...]]])
Ancora una volta, nel tuo caso, prova questo:
if (this.options.destroyOnHide) {
setTimeout(this.tip.destroy.bind(this.tip), 1000);
}
La stessa funzionalità è stata implementata anche in Prototype (altre librerie?).
Function.prototype.bind
può essere implementato in questo modo se si desidera la compatibilità all'indietro personalizzata (ma si prega di osservare le note).
Per lo sviluppo all'avanguardia (2015) è possibile utilizzare le funzioni della freccia grassa , che fanno parte delle specifiche ECMAScript 2015 (Harmony / ES6 / ES2015) ( esempi ).
Un'espressione della funzione freccia (nota anche come funzione freccia grassa ) ha una sintassi più breve rispetto alle espressioni di funzione e associa lessicamente il this
valore [...].
(param1, param2, ...rest) => { statements }
Nel tuo caso, prova questo:
if (this.options.destroyOnHide) {
setTimeout(() => { this.tip.destroy(); }, 1000);
}
Se stai già utilizzando jQuery 1.4+, esiste una funzione già pronta per l'impostazione esplicita del this
contesto di una funzione.
jQuery.proxy () : accetta una funzione e ne restituisce una nuova che avrà sempre un contesto particolare.
$.proxy(function, context[, additionalArguments])
Nel tuo caso, prova questo:
if (this.options.destroyOnHide) {
setTimeout($.proxy(this.tip.destroy, this.tip), 1000);
}
È disponibile in Underscore.js, oltre a lodash, come _.bind(...)
1 , 2
bind Associa una funzione a un oggetto, il che significa che ogni volta che viene chiamata la funzione, il valore dithis
sarà l'oggetto. Facoltativamente, associare gli argomenti alla funzione per precompilarli, noto anche come applicazione parziale.
_.bind(function, object, [*arguments])
Nel tuo caso, prova questo:
if (this.options.destroyOnHide) {
setTimeout(_.bind(this.tip.destroy, this.tip), 1000);
}
legare jquery underscore.js ECMAScript-5 prototypejs node.js