JavaScript中This到底指哪个对象?

时间:2022-04-29 19:14:12

先来看这一段代码


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 对象本身

从代码当中我们分明可以看出, 二者调用的其实是同一个函数。

可为什么结果不同呢?  因为函数此刻所依附的对象不同了。

就好像同一句话,出自不同人之口,代词指向的目标则会不一样。

 

AB说:“老子要杀了你!”  

这里的老子指代A指代B

BA说:老子要弄死你!

这里的老子指代B指代A

最后一个实验:

target.onclick =function(){

setInterval(function(){

console.log(this); //这里的this是什么?

},50);
}

表面上看,this处于onclick函数当中。那么我们可能会直观的认为,

this指的应该是target。但很显然这个答案错误。

 

this本质上是处于定时器的匿名函数当中,而这个匿名函数是在全局范围被调用的,相当于如下代码:

window.匿名函数();

因此,这里的this指的是window对象。

注:在严格模式下,this是不允许指向window的,当出现指向window的情况,会报错。