Il existe des raccourcis prêts à l'emploi (sucre syntaxique) vers l'encapsuleur de fonction auquel @CMS a répondu. (Ci-dessous, en supposant que le contexte que vous souhaitez est this.tip
.)
Si vous ciblez un navigateur compatible avec ECMA-262, 5e édition (ECMAScript 5) ou Node.js , vous pouvez utiliser Function.prototype.bind
. Vous pouvez éventuellement passer n'importe quel argument de fonction pour créer des fonctions partielles .
fun.bind(thisArg[, arg1[, arg2[, ...]]])
Encore une fois, dans votre cas, essayez ceci:
if (this.options.destroyOnHide) {
setTimeout(this.tip.destroy.bind(this.tip), 1000);
}
La même fonctionnalité a également été implémentée dans Prototype (toutes autres bibliothèques?).
Function.prototype.bind
peut être implémenté comme ceci si vous voulez une compatibilité descendante personnalisée (mais veuillez respecter les notes).
Pour un développement de pointe (2015), vous pouvez utiliser les fonctions de flèche grasse , qui font partie de la spécification ECMAScript 2015 (Harmony / ES6 / ES2015) ( exemples ).
Une expression de fonction de flèche (également connue sous le nom de fonction de flèche de graisse ) a une syntaxe plus courte par rapport aux expressions de fonction et lie lexicalement la this
valeur [...].
(param1, param2, ...rest) => { statements }
Dans votre cas, essayez ceci:
if (this.options.destroyOnHide) {
setTimeout(() => { this.tip.destroy(); }, 1000);
}
Si vous utilisez déjà jQuery 1.4+, il existe une fonction prête à l'emploi pour définir explicitement le this
contexte d'une fonction.
jQuery.proxy () : prend une fonction et retourne une nouvelle qui aura toujours un contexte particulier.
$.proxy(function, context[, additionalArguments])
Dans votre cas, essayez ceci:
if (this.options.destroyOnHide) {
setTimeout($.proxy(this.tip.destroy, this.tip), 1000);
}
Il est disponible dans Underscore.js, ainsi que lodash, comme _.bind(...)
1 , 2
bind Lier une fonction à un objet, ce qui signifie que chaque fois que la fonction est appelée, la valeur dethis
sera l'objet. Vous pouvez éventuellement lier des arguments à la fonction pour les pré-remplir, également appelés application partielle.
_.bind(function, object, [*arguments])
Dans votre cas, essayez ceci:
if (this.options.destroyOnHide) {
setTimeout(_.bind(this.tip.destroy, this.tip), 1000);
}
lier jquery underscore.js ecmascript-5 prototypejs node.js