Maison  >  Article  >  interface Web  >  Pourquoi JavaScript bind() est-il requis pour conserver la valeur « cette » dans les rappels asynchrones et les arguments de fonction ?

Pourquoi JavaScript bind() est-il requis pour conserver la valeur « cette » dans les rappels asynchrones et les arguments de fonction ?

DDD
DDDoriginal
2024-10-25 04:31:29380parcourir

Why is JavaScript bind() Required for Preserving 'this' Value in Asynchronous Callbacks and Function Arguments?

Pourquoi JavaScript bind() est-il nécessaire ?

En JavaScript, le mot-clé this fait référence à l'objet qui possède la fonction en cours d'exécution. Cependant, dans les rappels asynchrones ou lors du passage de fonctions comme arguments à d'autres fonctions, la valeur de this peut être perdue.

Le besoin de bind()

Lorsqu'une fonction est appelée comme méthode de un objet (par exemple, object.method()), cela fait correctement référence à l'objet. Cependant, lorsque la fonction est invoquée en tant que fonction autonome (par exemple, method()), la valeur par défaut est l'objet global.

Pour éviter ce problème, bind() vous permet de spécifier manuellement la valeur de ceci lorsque appeler une fonction dans le futur. Il renvoie une nouvelle fonction avec sa valeur this liée à l'objet spécifié.

Solution dans l'exemple 2

Dans l'exemple 2, bind() est utilisé pour créer une nouvelle fonction (storeMyName2) qui a c'est cette référence liée à myName. Cela garantit que lorsque la nouvelle fonction est appelée, elle fera référence à myName, quelle que soit la façon dont elle est appelée.

Comparaison avec l'exemple 3

Dans l'exemple 3, storeMyName3 est défini sur le résultat de appelant directement myName.getName(). Cela signifie que storeMyName3 contient la valeur renvoyée, qui est simplement la chaîne « Tom ». Ce n'est pas une fonction comme storeMyName et storeMyName2, donc cela n'implique pas le concept de ceci.

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:
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