Il existe des raccourcis prêts à l'emploi (sucre syntaxique) pour l'enveloppe de fonction avec laquelle @CMS a répondu. (Ci-dessous en supposant que le contexte que vous voulez est this.tip
.)
Pour pratiquement tout le développement javascript (en 2020), vous pouvez utiliser fonctions de la flèche de la graisse qui sont partie de la spécification ECMAScript 2015 (Harmony/ES6/ES2015) .
Un site expression de la fonction flèche (également connu sous le nom de fonction de la flèche de la graisse ) a une syntaxe plus courte par rapport aux expressions de fonction et lie lexicalement l'élément this
valeur [...].
(param1, param2, ...rest) => { statements }
Dans votre cas, essayez ceci :
if (this.options.destroyOnHide) {
setTimeout(() => { this.tip.destroy(); }, 1000);
}
Si vous ciblez navigateur compatible avec ECMA-262, 5e édition (ECMAScript 5) o Node.js ce qui (en 2020) signifie tous les navigateurs courants ainsi que les navigateurs plus anciens, vous pourriez utiliser Function.prototype.bind
. Vous pouvez éventuellement passer n'importe quel argument de fonction pour créer 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é mis en œuvre dans Prototype (d'autres bibliothèques ?).
Function.prototype.bind
peut être mis en œuvre comme suit si vous souhaitez une rétrocompatibilité personnalisée (mais veuillez respecter les notes).
Si vous utilisez déjà jQuery 1.4+, il existe une fonction prête à l'emploi qui permet de définir explicitement l'attribut this
le contexte d'une fonction.
jQuery.proxy() : Prend une fonction et en 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 dans lodash, sous forme de _.bind(...)
1 , 2
lier Lier une fonction à un objet, ce qui signifie qu'à chaque fois que la fonction est appelée, la valeur de l'objet de type this
sera l'objet. En option, liez des arguments à la fonction pour les pré-remplir, également connu sous le nom d'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
4 votes
Le double drapeau est-il vraiment valable ? Cette question a en fait été posée plus tôt.
1 votes
If (this.options.destroyOnHide) { setTimeout(function() { this.tip.destroy() }.bind(this), 1000) ; } ; }