Maison >interface Web >js tutoriel >Comment préserver le contexte « ce » dans « setInterval() » de JavaScript ?

Comment préserver le contexte « ce » dans « setInterval() » de JavaScript ?

DDD
DDDoriginal
2024-12-05 18:25:11200parcourir

How to Preserve the `this` Context in JavaScript's `setInterval()`?

Préserver la référence 'this' dans le gestionnaire setInterval de JavaScript

Lorsque vous travaillez avec la fonction setInterval() de JavaScript, il est courant de rencontrer le "this" problème. Cela se produit lorsque vous devez accéder aux propriétés ou aux méthodes d'un objet à partir de la fonction de gestionnaire d'intervalles.

Considérez le code suivant :

prefs: null,
startup: function() {
  // init prefs
  ...
  this.retrieve_rate();
  this.intervalID = setInterval(this.retrieve_rate, this.INTERVAL);
},

retrieve_rate: function() {
  var ajax = null;
  ajax = new XMLHttpRequest();
  ajax.open('GET', 'http://xyz.example', true);
  ajax.onload = function() {
    // access prefs here
  }
}

Dans cet exemple, nous souhaitons accéder à la propriété prefs. à partir de la fonction de gestionnaire ajax.onload. Cependant, cela ne fonctionne pas comme prévu car la référence this est perdue dans le gestionnaire d'intervalle.

Pour résoudre ce problème, vous pouvez utiliser la méthode bind() pour créer une nouvelle fonction qui lie la référence this. Voici comment :

this.intervalID = setInterval(this.retrieve_rate.bind(this), this.INTERVAL);

En utilisant bind(), nous créons une nouvelle fonction dont la référence this est liée à l'objet d'origine (this). Cela garantit que la propriété prefs est correctement référencée dans le gestionnaire ajax.onload.

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!

Déclaration:
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