Les fonctions fléchées ne sont pas conçues pour être utilisées dans toutes les situations simplement comme une version abrégée de fonctions à l'ancienne. Ils ne visent pas à remplacer la syntaxe de fonction à l'aide du function
mot - clé. Le cas d'utilisation le plus courant pour les fonctions fléchées est celui des "lambdas" courts qui ne se redéfinissent pas this
, souvent utilisés lors du passage d'une fonction en tant que rappel à une fonction.
Les fonctions fléchées ne peuvent pas être utilisées pour écrire des méthodes d'objet car, comme vous l'avez constaté, puisque les fonctions fléchées se ferment sur le this
contexte englobant lexicalement, this
la flèche à l' intérieur de la flèche est celle qui était courante là où vous avez défini l'objet. C'est-à-dire:
var chopper = {
owner: 'Zed',
getOwner: () => {
return this.owner;
}
};
Dans votre cas, voulant écrire une méthode sur un objet, vous devez simplement utiliser la function
syntaxe traditionnelle , ou la syntaxe de méthode introduite dans ES6:
var chopper = {
owner: 'Zed',
getOwner: function() {
return this.owner;
}
};
var chopper = {
owner: 'Zed',
getOwner() {
return this.owner;
}
};
(Il existe de petites différences entre eux, mais elles ne sont importantes que si vous utilisez super
in getOwner
, ce que vous n'êtes pas, ou si vous copiezgetOwner
dans un autre objet.)
Il y a eu un débat sur la liste de diffusion es6 à propos d'une torsion des fonctions fléchées qui ont une syntaxe similaire mais avec la leur this
. Cependant, cette proposition a été mal accueillie car il ne s'agit que d'un simple sucre de syntaxe, permettant aux gens d'économiser quelques caractères et ne fournit aucune nouvelle fonctionnalité par rapport à la syntaxe de fonction existante. Consultez la rubrique Fonctions fléchées indépendantes .
this
différemment. Il est défini par l'environnement lexical dans lequel la fonction a été créée, ce qui signifie que lathis
valeur où vous créez lachopper
variable sera lathis
valeur de la fonction. En d'autres termes, il ne fera pas référence à l'chopper
objet.