Maison > Article > interface Web > Comprendre profondément le mot-clé this en JS
Après avoir terminé ma soutenance de master, j’ai commencé à continuer à travailler dur pour un changement de carrière. Xiaobai va avoir du mal, allez. Cet article est tiré de la série de base JS : Une brève discussion sur la portée des fonctions.
Dans une fonction, this pointe toujours vers l'objet propriétaire de la fonction actuelle. Le point spécifique de celui-ci ne peut être déterminé qu'au moment de l'exécution, et son objet appelant ne peut être connu.
window.name = "window"; function f(){ console.log(this.name); } f();//输出window var obj = {name:'obj'}; f.call(obj); //输出obj
Lorsque f() est exécuté, l'appelant de f() est l'objet window, donc "window" est affiché.
f.call(obj) met f() sur l'objet obj et l'exécute, ce qui équivaut à obj.f(). À ce stade, ceci dans f est obj, donc la sortie est "obj". ".
code1 :
var foo = "window"; var obj = { foo : "obj", getFoo : function(){ return function(){ return this.foo; }; } }; var f = obj.getFoo(); console.log(1+":"+f()); //输出window
code2 :
var foo = "window"; var obj = { foo : "obj", getFoo : function(){ var that = this; return function(){ return that.foo; }; } }; var f = obj.getFoo(); console.log(f()); //输出obj
code1 :
L'exécution de var f = obj.getFoo() renvoie une fonction anonyme, tout à fait In :
var f = function(){
return this.foo;
}
f() est équivalent à window.f(), donc ceci dans f pointe vers l'objet window, ce .foo est équivalent à window.foo, donc f() renvoie "window"
code2 :
L'exécution de var f = obj.getFoo() renvoie également une fonction anonyme, c'est-à-dire :
var f = function (){
return that.foo;
}
La seule différence est que ceci dans f devient cela. Avant de savoir de quel objet il s'agit, déterminez d'abord la chaîne de portée de f : f-> ;getFoo. ->window et recherchez-le sur la chaîne. À ce stade, vous pouvez trouver que cela fait référence à this dans getFoo, et this dans getFoo pointe vers l'appelant de son runtime. Cela peut être vu à partir de var f = obj.getFoo. () À ce stade, cela pointe vers l'objet obj, donc that.foo est équivalent à obj.foo, donc f() renvoie "obj".
Les étudiants qui ne sont pas clairs sur la chaîne de portée peuvent se référer à JavaScript de la portée à la fermeture.
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!