Maison > interface Web > js tutoriel > le corps du texte

Comment gérer les problèmes contextuels avec « ceci » en JavaScript lors de l'utilisation de setTimeout ?

Barbara Streisand
Libérer: 2024-10-24 11:02:29
original
693 Les gens l'ont consulté

How to Handle Contextual Issues with

setTimeout et "this" en JavaScript

Lors de l'utilisation de la fonction setTimeout dans une méthode de classe, il est possible de rencontrer une erreur indiquant qu'une autre méthode au sein de la classe (par ex. , "method2" dans le code fourni) n'est pas défini après le délai d'attente. Cela est dû à la façon dont JavaScript gère le mot-clé this dans les fonctions imbriquées.

Dans l'exemple de code, la fonction setTimeout est utilisée avec un délai spécifié pour appeler la fonction de méthode dans l'objet de test. La fonction method2 est appelée dans la fonction méthode pour récupérer un élément d'image en fonction d'un identifiant transmis. Au départ, cela fonctionne sans problème.

Cependant, après le délai d'attente, la fonction method2 devient indéfinie en raison de la façon dont elle est liée dans la fonction setTimeout. Par défaut, this fait référence à l'objet global lorsqu'il est appelé comme rappel dans un setTimeout.

Pour résoudre ce problème, une solution consiste à ajouter .bind(this) à la fin de la fonction transmise à setTimeout. Cela garantit que ce contexte est correctement lié à l'objet (dans ce cas, l'objet de test). Dans le code modifié :

<code class="js">test.prototype.method = function() {
    //method2 returns image based on the id passed
    this.method2('useSomeElement').src = "http://www.some.url";
    timeDelay = window.setTimeout(this.method.bind(this), 5000);
    //                                       ^^^^^^^^^^^ <- fix context
};</code>
Copier après la connexion

L'utilisation de .bind(this) permet à la fonction method2 de conserver le contexte approprié dans le rappel setTimeout, lui permettant de récupérer et de manipuler avec succès l'élément image.

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
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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!