"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Fonctions fléchées par rapport aux déclarations de méthode dans ES6: Pourquoi «cela» ne fonctionne-t-il pas comme prévu dans les fonctions Arrow?

Fonctions fléchées par rapport aux déclarations de méthode dans ES6: Pourquoi «cela» ne fonctionne-t-il pas comme prévu dans les fonctions Arrow?

Publié le 2025-03-23
Parcourir:688

Arrow Functions vs. Method Declarations in ES6: Why Doesn't `this` Work as Expected in Arrow Functions?

Fonctions Arrow vs Déclaration de méthode dans es6

Lorsque vous plongez dans es6, vous pouvez rencontrer le problème suivant:

var person = {
  name: "jason",

  shout: () => console.log("my name is ", this.name)
};

person.shout(); // Prints "my name is "

L'intention est d'avoir la fonction accéder à la propriété du nom au sein de l'objet personne. Cependant, la console imprime uniquement "Mon nom est."

Explication:

Ce comportement provient de la nature distincte des fonctions de flèche dans ES6. Les fonctions de flèche, contrairement aux déclarations de fonctions traditionnelles, ne lient pas le mot clé. Au lieu de cela, ils héritent de cette liaison à partir de leur portée environnante, qui, dans ce cas, est la portée globale.

Solution:

pour résoudre ce problème, vous pouvez utiliser le modèle de déclaration de la méthode ES6, qui conserve la liaison souhaitée:

var person = {
  name: "jason",

  shout() {
    console.log("my name is ", this.name);
  }
};

person.shout(); // Prints "my name is jason"
Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3