Maison >interface Web >js tutoriel >Quand la liaison « ceci » est-elle nécessaire en JavaScript ?

Quand la liaison « ceci » est-elle nécessaire en JavaScript ?

Barbara Streisand
Barbara Streisandoriginal
2024-10-24 12:47:02847parcourir

When is Binding

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

En JavaScript, la valeur de « this » est déterminée par la manière dont une fonction est appelée. Si vous appelez directement la fonction, vous contrôlez la valeur de "this".

Cependant, lorsque les fonctions sont transmises en tant que rappels ou gestionnaires d'événements, un code externe les appelle, ce qui entraîne des valeurs "this" inattendues. Pour vous assurer que "this" fait référence à un objet spécifique, vous pouvez utiliser la méthode .bind.

.bind vous permet de définir la valeur de "this" avant d'appeler la fonction, la liant efficacement à cet objet.

Pourquoi le problème « ceci » est-il présent ?

Ce problème découle de la façon dont l'environnement d'exécution de JavaScript détermine la valeur de « ceci ». Lorsqu'une fonction est définie, "this" n'est pas défini. Si la fonction est appelée en tant que méthode d'un objet, "this" fera référence à cet objet.

Cependant, lorsqu'une fonction est appelée indépendamment ou en tant que rappel, "this" fera généralement référence à l'objet global. (ou indéfini en mode strict). Pour garantir la cohérence et un comportement correct, il est crucial de contrôler la valeur de "this" via des méthodes telles que .bind.

Exemple 3 par rapport à l'exemple 1/2

Dans l'exemple 3, storeMyName3 appelle directement la fonction getName, qui renvoie la valeur de myName.name. Ce résultat est affecté à storeMyName3, qui n'est pas une fonction mais une valeur.

En revanche, dans les exemples 1 et 2, storeMyName et storeMyName2 sont des références à la fonction getName elle-même. Lorsque vous les appelez, vous exécutez la fonction et obtenez le résultat.

L'exemple 2 utilise .bind(myName) pour définir la valeur de "this" sur myName avant d'appeler la fonction. Cela garantit que this.name fait référence à myName.name.

Par conséquent, l'exemple 3 ne rencontre pas le problème "this" car il n'appelle pas la fonction plus tard, tandis que les exemples 1 et 2 nécessitent .bind pour définissez explicitement la valeur "this" lors d'un appel ultérieur.

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