Maison  >  Article  >  interface Web  >  Comprendre profondément le mot-clé this en JS

Comprendre profondément le mot-clé this en JS

迷茫
迷茫original
2017-03-26 17:44:231410parcourir

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!

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