Dans ES6, les méthodes d'objet peuvent être définies à l'aide de la syntaxe de fonction traditionnelle ou de la syntaxe de méthode concise. Cependant, pouvons-nous exploiter les fonctions fléchées nouvellement introduites dans ce contexte ?
Tentative d'utilisation et erreur rencontrée :
Tentatives d'utilisation des fonctions fléchées comme méthodes d'objet, comme indiqué ci-dessous , aboutit à un erreur :
var chopper = { owner: 'John', getOwner: () => { return this.owner; } };
Raisonnement :
Les fonctions fléchées ne fonctionnent pas comme prévu dans les méthodes objet car elles capturent la valeur lexicale this, qui est en dehors du contexte de l'objet. Il en résulte que this fait référence au ceci global ou au ceci de la fonction lexicalement englobante, et non à l'instance d'objet.
Alternatives et recommandations :
Pour les méthodes objet, traditionnelles La syntaxe de la fonction ou la syntaxe de la méthode ES6 doit être utilisée :
// Traditional function syntax var chopper = { owner: 'Zed', getOwner: function() { return this.owner; } }; // ES6 method syntax var chopper = { owner: 'Zed', getOwner() { return this.owner; } };
Fonctions fléchées non liées (rejetées Proposition) :
Il y a eu une proposition pour des fonctions fléchées non liées qui introduiraient une syntaxe similaire aux fonctions fléchées mais avec une liaison this distincte. Cependant, cette proposition a été rejetée car elle réduisait uniquement le passe-partout sans offrir de nouvelles fonctionnalités.
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!