Maison > interface Web > js tutoriel > Gestion de la référence « cette » dans les méthodes prototypes avec setInterval et setTimeout : quelles sont les solutions ?

Gestion de la référence « cette » dans les méthodes prototypes avec setInterval et setTimeout : quelles sont les solutions ?

Linda Hamilton
Libérer: 2024-10-18 15:03:30
original
386 Les gens l'ont consulté

Handling

Gestion de cette référence dans les méthodes prototypes avec setInterval et setTimeout

En JavaScript, une méthode prototype perd son association this lorsqu'elle est extraite et transmise ailleurs. Considérez le code suivant :

function Foo() {}
Foo.prototype = {
  bar: function () {
    this.baz();
  },
  baz: function () {
    this.draw();
    requestAnimFrame(this.baz);
  }
};
Copier après la connexion

Ce code échoue avec une erreur car il n'est pas correctement lié à l'intérieur des rappels setInterval ou setTimeout.

Solutions :

Il existe plusieurs façons de gérer ce problème :

Appel de méthode Wrap dans une fonction anonyme :

var that = this;
setInterval(function () {
  return that.baz();
}, 1000);
Copier après la connexion

Cela préserve le this de la fonction externe à l'aide d'un variable d'assistance.

Appel de méthode Wrap dans la fonction Fat Arrow :

setInterval(() => this.baz(), 1000);
Copier après la connexion

Les fonctions anonymes de grosse flèche maintiennent le this à partir de la fonction environnante.

Utiliser une fonction de liaison :

setInterval(this.baz.bind(this), 1000);

// dojo toolkit example:
setInterval(dojo.hitch(this, 'baz'), 10);
Copier après la connexion

Des fonctions de liaison telles que Function.prototype.bind ou des équivalents de bibliothèque vous permettent de lier explicitement ce contexte.

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