1. 普通函数的this
- 如果一个函数中有this,但是它没有被上一级的对象所调用,那么this指向的就是window
- 如果一个函数中有this,这个函数有被上一级的对象所调用,那么this指向的就是上一级的对象
- 如果一个函数中有this,这个函数中包含多个对象,尽管这个函数是被最外层的对象所调用,this指向的也只是它上一级的对象
function a() {
var user = "zmf";
console.log(this.user) //undifine
console.log(this) //window
};
window.a();
var o = {
a:10,
b: {
a:12,
fn : function () {
console.log(this.user)
console.log(this)
}
}
}
//虽然函数fn是被对象b所引用,但是在将fn赋值给变量j的时候并没有执行所以最终指向的是window
//this永远指向的是最后调用它的对象,也就是看它执行的时候是谁调用的
var j = o.b.fn;
j();
2. 构造函数的this
//这里之所以对象a可以点出函数Fn里面的user是因为new关键字可以改变this的指向,将这个this指向对象a,
//为什么我说a是对象,因为用了new关键字就是创建一个对象实例
function Fn(){
this.user = "zmf";
}
var a = new Fn();
console.log(a.user);
3. 有返回值的this
如果返回值是一个对象,那么this指向的就是那个返回的对象,如果返回值不是一个对象那么this还是指向函数的实例