En Javascript, pourquoi l'opérateur "this" est-il incohérent ?
En JavaScript, l'opérateur "this" présente un comportement varié en fonction du contexte d’invocation. Cela peut entraîner de la confusion et des résultats inattendus, en particulier lorsque vous travaillez avec des rappels et des objets.
Modèles d'appel et liaison "this"
L'opérateur "this" est lié à l'objet ou la classe lors de l'invocation de la fonction, et cette liaison est déterminée par le modèle d'invocation :
L'énigme du rappel
Le problème survient lorsque le rappel d'une méthode est invoqué en tant que fonction. Étant donné que les rappels ne sont pas invoqués en tant que méthodes, « this » fait référence à la portée globale au lieu de l'objet auquel il était initialement destiné.
Bonnes pratiques
Une stratégie à maintenir la cohérence dans la liaison "this" dans les rappels consiste à utiliser le "var that = this;" modèle. Cela attribue une référence à « ceci » (l'objet) à une nouvelle variable (cela), qui peut ensuite être utilisée dans le rappel.
Une autre approche recommandée consiste à adopter l'aspect de programmation fonctionnelle de JavaScript et à éviter de s'appuyer sur des classes. et les modèles d'héritage. En utilisant des fonctions pures et des fonctions d'ordre supérieur, vous pouvez séparer la logique des états d'objet et obtenir un code plus modulaire et plus prévisible.
En outre, envisagez d'utiliser un framework JavaScript qui fournit des mécanismes pour gérer « cette » liaison et l'objet- programmation orientée de manière cohérente. N'oubliez pas de lire attentivement la documentation et les bizarreries du framework pour éviter tout comportement inattendu.
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