先来看这一段代码
target.onclick = function(){
console.log(this);
}
请问这里打印出什么?
很显然,会打印出target对象本身。
我们都知道,this 的含义 代表 当前对象,该如何来理解当前二字呢?
任何的话都需要语境,上下文环境,放在不同的地方,含义可能就大不相同。
当有一个人对着你大喊一声:开!
如果你手里有把枪,你会扣动扳机。如果你坐在汽车里,你会踩油门。如果你站在阳台,你可能会打开窗户。如果你在打麻将,对方可能胡牌了。。。。
THIS身为一个关键字,它所指代的是此刻正在运行的函数依附于哪个对象。
再来看这一段代码
target.onclick = function(){
console.log(this);
}
obj.test = target.onclick;
然后我们测试一下
target.onclick(); // 结果是 target对象本身
obj.test(); //结果为obj 对象本身
从代码当中我们分明可以看出, 二者调用的其实是同一个函数。
可为什么结果不同呢? 因为函数此刻所依附的对象不同了。
就好像同一句话,出自不同人之口,代词指向的目标则会不一样。
A对B说:“老子要杀了你!”
这里的老子指代A,你指代B
B对A说:”老子要弄死你!”
这里的老子指代B,你指代A
最后一个实验:
target.onclick =function(){
setInterval(function(){
console.log(this); //这里的this是什么?
},50);
}
表面上看,this处于onclick函数当中。那么我们可能会直观的认为,
this指的应该是target。但很显然这个答案错误。
this本质上是处于定时器的匿名函数当中,而这个匿名函数是在全局范围被调用的,相当于如下代码:
window.匿名函数();
因此,这里的this指的是window对象。
注:在严格模式下,this是不允许指向window的,当出现指向window的情况,会报错。