研究 this
定义: 总是指向函数的所有者
看完还是很懵逼,首先我们要搞懂什么是调用者什么是所有者,如下例子:
调用者:
把函数a赋值给变量c那变量域 c 就是函数a的调用者,此时的变量c存放的是a的地址
同理d的x属性域也存放a函数的地址,它也是函数a的调用者.
所有者:
因为c 是属于全局对象window 所有,所以window对象就是函数a的所有者
同理,x属于对象d所有,所以对象d也是函数a的所有者
function a(){
console.log(this+"我是a函数");
};
var c = a;
var d = {
x:a
};
c(); //[object Window]我是a函数
d.x(); //[object Object]我是a函数
理解了调用者和所有者,那this就好办了;
举个例子:大家可以去试试
function f(){
this.x = function(){
console.log(this)
}
}
函数 f this 所有者window
this.f() === f() === window.f()
this.x() 所有者也是window
在执行f()后,
this.x() === x() === window.x()
this === window ,window是可以省略的