Maison > interface Web > js tutoriel > Pourquoi `bind()` ne fonctionne-t-il pas avec `this` des fonctions fléchées ?

Pourquoi `bind()` ne fonctionne-t-il pas avec `this` des fonctions fléchées ?

Barbara Streisand
Libérer: 2024-12-13 17:07:09
original
841 Les gens l'ont consulté

Why Doesn't `bind()` Work with Arrow Functions' `this`?

L'énigme de la liaison de « ceci » dans les fonctions de flèche : un dilemme dévoilé

Malgré la simplicité séduisante des fonctions de flèche, leur comportement impénétrable concernant ' cela a intrigué de nombreux développeurs. L'incapacité de lier « ceci » à un contexte spécifique au sein d'une fonction flèche est devenue une source récurrente de frustration.

Pour illustrer le dilemme, considérons ce code :

const f = () => console.log(this);

const o = { a: 42 };

const fBound = f.bind(o);

fBound(); // Expected: { a: 42 }, Actual: { window: Window }
Copier après la connexion

Dans cet exemple , nous essayons de lier le contexte 'this' de la fonction flèche 'f' à l'objet 'o' en utilisant la méthode 'bind()'. Cependant, l'invocation de « fBound() » enregistre inexplicablement l'objet global « window » au lieu de l'objet « o » attendu.

Ce comportement déroutant est enraciné dans la nature inhérente des fonctions fléchées. Contrairement aux fonctions normales, qui ont leur propre contexte « ce », les fonctions fléchées héritent de leur liaison « ce » de la portée lexicale environnante. Dans ce cas, « f » a été défini dans la portée globale, ce qui rend « this » lié à l'objet global « window ».

La spécification ECMAScript 2015 indique clairement :

"Toute référence à Les arguments, super, this ou new.target dans une ArrowFunction doivent se résoudre en une liaison dans un environnement lexicalement englobant. "

Ainsi, relier «ceci» dans une fonction de flèche devient impossible. 'this' restera éternellement ancré au contexte dans lequel la fonction flèche a été définie.

Si l'utilisation significative de 'this' est cruciale pour votre code, la ligne de conduite prudente consiste à utiliser des fonctions régulières au lieu de fonctions de flèche. Les fonctions régulières offrent un meilleur contrôle sur la liaison « this », vous permettant de lier « this » explicitement au contexte souhaité à l'aide de « bind() » ou d'autres méthodes.

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!

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