Maison > interface Web > js tutoriel > Pourquoi le pointeur \'this\' pointe-t-il vers l'objet global dans les fonctions JavaScript imbriquées ?

Pourquoi le pointeur \'this\' pointe-t-il vers l'objet global dans les fonctions JavaScript imbriquées ?

Susan Sarandon
Libérer: 2024-10-19 06:48:30
original
647 Les gens l'ont consulté

Why Does the

Mystère du pointeur JavaScript "this" dans les fonctions imbriquées

Dans un extrait de code JavaScript, vous avez rencontré un comportement inattendu concernant le "this" " pointeur dans une fonction imbriquée. Malgré la définition de la fonction imbriquée dans une méthode objet, le pointeur "this" à l'intérieur de la fonction imbriquée pointe vers l'objet "window" global.

Le comportement du pointeur "this" est déterminé par la méthode d'invocation de fonction dans JavaScript. Il existe trois méthodes principales :

  1. Invocation directe : someThing.someFunction(arg1, arg2, argN)

    • Dans cette méthode, le pointeur "this" fait référence à l'objet appelant la fonction, dans ce cas, someThing.
  2. Appel de fonction avec call() : someFunction.call(someThing, arg1, arg2, argN)

    • La fonction call() définit explicitement le pointeur "this" vers l'objet fourni, dans ce cas, someThing.
  3. Appel de fonction avec apply() : someFunction.apply(someThing, [arg1, arg2, argN])

    • Similaire à call(), la fonction apply() définit le pointeur "this" sur l'objet fourni, mais elle prend un tableau d'arguments à la place.

Dans l'exemple que vous avez fourni, la fonction imbriquée est invoquée sans aucune des méthodes d'invocation de fonction explicites. Par conséquent, le pointeur "this" est par défaut l'objet global, qui est généralement l'objet "window" dans un environnement de navigateur.

Pour spécifier explicitement le comportement du pointeur "this", vous pouvez utiliser les modifications suivantes :

  1. Utilisez std_obj.displayMe() au lieu de std_obj.displayMe ; pour appeler explicitement la méthode displayMe.
  2. Définissez explicitement la fonction imbriquée avec le pointeur this de l'objet : var doSomeEffects = function() { var that = this; ... >
  3. Utilisez les fonctions call() ou apply() pour définir le pointeur "this" : doSomeEffects.call(std_obj);

En utilisant l'une de ces méthodes , vous pouvez contrôler le comportement du pointeur "this" dans les fonctions imbriquées et vous assurer qu'il fait référence à l'objet souhaité.

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!

source:php
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal