Pouvez-vous lier flèche fonctions?
J'ai fait des expériences avec des ES6 pour un certain temps maintenant, et je viens d'un léger problème.
J'aime vraiment l'aide des touches flèche fonctions, et quand je le peux, je les utilise.
Cependant, il semble que vous ne pouvez pas lier!
Voici la fonction:
var f = () => console.log(this);
Ici est l'objet que je désire lier la fonction:
var o = {'a': 42};
Et voici comment je voudrais lier f
à o
:
var fBound = f.bind(o);
Et puis je peux juste appeler fBound
:
fBound();
Qui sera de sortie ce (la o
objet):
{'a': 42}
Cool! Très joli! Sauf que cela ne fonctionne pas. Au lieu de reproduire les o
objet, il génère le window
objet.
Donc je voudrais savoir: vous pouvez lier flèche fonctions? (Et si oui, comment?)
J'ai testé le code ci-dessus dans Google Chrome 48 et Firefox 43, et le résultat est le même.
- Le point de l'ensemble de la flèche fonctions est qu'elles utilisent le
this
de leur parent.
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas "réassocier une" flèche de la fonction. Il sera toujours appelée avec le contexte dans lequel il a été défini. Il suffit d'utiliser une fonction normale.
De la ECMAScript 2015 Specs:
Pour être complet, vous peut re-lier flèche fonctions, vous ne pouvez pas modifier le sens de
this
.bind
a encore de la valeur pour les arguments de la fonction:Essayer ici:
http://jsbin.com/motihanopi/edit?js console
this
(qui est, bien sûr, définie sur le plan lexical)?De la MDN:
Cela signifie que vous ne pouvez pas lier une valeur comme vous le souhaitez.
Pendant des années, js développeurs ont lutté avec le contexte de liaison, a demandé pourquoi
this
changé en javascript, donc beaucoup de confusion sur la années en raison du contexte de liaison et de la différence entre le sens dethis
en javascript etthis
dans la plupart des autres langages OOP.Tout cela m'amène à me demander, pourquoi, pourquoi! pourquoi voudriez-vous wan pas à relier par une flèche fonction! Ceux qui ont été créés spécialement pour résoudre tous ces problèmes et de confusions et d'éviter d'avoir à utiliser
bind
oucall
ou de quelque autre manière à préserver le champ d'application de la fonction.TL;DR
Non, vous ne pouvez pas relier la flèche fonctions.
this
n'est pas fonctionnel. les lambdas devrait êtrearguments => output
. Si vous avez besoin d'un contexte externe, de le transmettre. L'existence même dethis
est ce qui a animé toutes les shoehorning de OO modèles dans la langue. Vous ne l'avez jamais entendu le terme de "classe javascript" sans elle.J'ai posé la même question il y a quelques jours.
Vous ne pouvez pas lier une valeur depuis la
this
est déjà lié.Liaison différentes de ce champ d'application à ES6 => la fonction de l'opérateur
this
est lié aussi. Le point est qu'en flèche des fonctions qu'il n'a pas de local liaison.Ne ES6 Flèche Fonctions de Vraiment Résoudre “ce” En JavaScript
Le lien ci-dessus explique que la flèche fonctions
this
ne change pas avecbind, call, apply
fonctions.Il est expliqué avec un très bon exemple.
exécuter ce dans
node v4
de voir les "attendus" de comportement,JS:
Peut-être que cet exemple vous aider à vous :
JS: