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