Problème :
Dans JavaScript prototypique, lors de la définition de fonctions au sein d'un prototype, la portée change et la valeur de "this" peut ne plus faire référence à l'instance de la classe. Cela peut rendre difficile l'accès aux propriétés et aux méthodes de l'objet d'origine.
Solution : Utilisation de la méthode bind()
La méthode bind() permet aux développeurs de préserver le contexte de « ceci » dans les fonctions prototypes. Il renvoie une nouvelle fonction avec le contexte spécifié lié comme premier argument, tandis que les arguments restants sont transmis à la fonction d'origine.
MyClass.prototype.myfunc = function() { this.element.click((function() { // ... }).bind(this)); };
Dans cet exemple, la méthode bind() est utilisée pour préserver le contexte. de "this" dans la fonction anonyme attribuée au gestionnaire d'événements de clic.
Exemple avec plusieurs prototypes Fonctions :
L'utilisation de bind() élimine le besoin de stocker explicitement une référence à « ceci » dans chaque fonction prototype. Par exemple :
MyClass.prototype.doSomething = function() { // operate on the element }.bind(this);
En utilisant bind() dans la définition de doSomething, le contexte de "this" est automatiquement préservé pour toutes les instances de la classe.
Éviter Global Variables :
L'utilisation d'une variable globale pour contenir une référence à "this" n'est pas recommandée car elle pollue l'espace de noms global et empêche plusieurs instances de la classe ne peuvent pas être créées sans interférer les unes avec les autres. La méthode bind() offre une solution plus efficace et plus propre.
Conclusion
La méthode bind() fournit un moyen puissant de préserver le contexte de « ceci » dans fonctions de prototype, éliminant ainsi le besoin de référencement manuel et de variables globales. Cette approche améliore la lisibilité, la maintenabilité et la flexibilité du code dans les applications JavaScript prototypes.
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!