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.
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.
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!