JavaScript中This到底指哪个对象?

21 篇文章 0 订阅

先来看这一段代码


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的情况,会报错。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值