Maison > interface Web > js tutoriel > Comment maintenir le contexte « this » correct dans les rappels « setTimeout » ?

Comment maintenir le contexte « this » correct dans les rappels « setTimeout » ?

Barbara Streisand
Libérer: 2024-12-10 12:05:14
original
930 Les gens l'ont consulté

How to Maintain the Correct `this` Context in `setTimeout` Callbacks?

Assurer la correction de ce contexte dans les rappels setTimeout

Lors de l'utilisation de setTimeout pour planifier une fonction de rappel, il est crucial de s'assurer que la fonction conserve le contexte souhaité. Cependant, des problèmes surviennent lorsque this fait référence à l'objet global dans le rappel.

Dans l'exemple fourni :

if (this.options.destroyOnHide) {
     setTimeout(function() { this.tip.destroy() }, 1000);
}
Copier après la connexion

this fait référence à la fenêtre globale, pas à l'objet prévu. Pour éviter cela, il existe plusieurs approches :

  1. Stocker le contexte :

Enregistrer une référence au contexte actuel avant d'appeler setTimeout.

var that = this;
if (this.options.destroyOnHide) {
     setTimeout(function(){ that.tip.destroy() }, 1000);
}
Copier après la connexion
  1. Utiliser la méthode de liaison (ES5) :

Créez une nouvelle fonction liée au contexte correct à l'aide de bind.

if (this.options.destroyOnHide) {
     setTimeout(function() { this.tip.destroy() }.bind(this), 1000);
}
Copier après la connexion
  1. Utilisez les fonctions fléchées (ES6) :

Les fonctions fléchées héritent automatiquement de cette valeur de leur lexical scope.

if (this.options.destroyOnHide) {
     setTimeout(() => { this.tip.destroy() }, 1000);
}
Copier après la connexion
  1. Passer des arguments au rappel (HTML5) :

Les minuteries HTML5 permettent de transmettre des arguments au rappel.

if (this.options.destroyOnHide) {
     setTimeout(function(that){ that.tip.destroy() }, 1000, this);
}
Copier après la connexion

N'oubliez pas que le contexte peut varier en fonction de la manière dont la fonction est invoquée. Pour garantir le comportement souhaité, envisagez l'approche appropriée en fonction des fonctionnalités linguistiques disponibles.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal