this的指向

this的指向

Posted by Lan on June 20, 2019

this在js的不同地方的指向是不同的

总结

this在一般函数中一般指向window

this在对象的方法中指向上一级调它用的对象

this在构造方法中指向他的实例对象

this在立即执行函数中指向全局window

在函数中

function a(){
    var user = "追梦子";
    console.log(this.user); //undefined
    console.log(this); //Window
}
a();

调用函数,此时相当于window调用a方法,而this指向调用他的上一级,但在window作用域中没有定义user,所以输出为undefine

在对象方法中

var o = {
    user:"追梦子",
    fn:function(){
        console.log(this.user);  //追梦子
    }
}
o.fn();

调用的上一级是o对象,在o对象的作用域中有user属性,所以可以通过this.user得到

var o = {
    a:10,
    b:{
        a:12,
        fn:function(){
            console.log(this.a); //undefined
            console.log(this); //window
        }
    }
}
var j = o.b.fn;
j();

这里虽然调用的上一级对象是b,但fn赋值给j的时候并没有执行,而在j这里才执行,所以this指向window

构造函数中的this

构造函数中的this指向新建的实例

function Fn(){
    this.user = "追梦子";
}
var a = new Fn();
console.log(a.user); //追梦子

另外当构造函数有返回值时

构造函数返回值为对象时,this指向这个返回的对象,否则就还是指向新建的实例

返回对象的构造函数,返回值为{},function(){}

function fn()  
{  
    this.user = '追梦子';  
    return {};  
}
var a = new fn;  
console.log(a.user); //undefined

返回值为其他值,如undefined,null,1等时,this仍然指向新建的实例