忘了原作者是谁了   自己也添加了一些东西  勉强可以观看一下

元素就不写了   可以自己添一下试试

先看这段代码

target.onclick = function(){

console.log(this);

}

 

答案打印的一定是target对象本身

任何的话都需要语境,上下文环境,放在不同的地方,含义可能就大不相同。

当有一个人对着你大喊一声:开!

如果你手里有把枪,你会扣动扳机。如果你坐在汽车里,你会踩油门。如果你站在阳台,你可能会打开窗户。

THIS身为一个关键字,它所指代的是此刻正在运行的函数依附于哪个对象。

以上面代码为例  增加

obj.test = target.onclick;

target.onclick();//结果是target对象本身

obj.test()//结果为obj对象本身

可以看到  虽然调用的函数相同  但是结果不同

因为函数此刻所依附的对象不同。

 

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

 

隔壁老王对你。。说 我爱你

你对老王说 你滚蛋

这个例子的你应该就是这个意思

 

再看一个

target.onclick = function(){

  setInterval(function(){console.log(this)},100);  

}

这个指向的对象是谁呢                                   表面上看 应该是target  

但是 计时器中this指向的是window     

target.onclick = function(){

  setInterval(function(){console.log(this)}.bind(this),100);  

}

那现在呢    它指向的就是target对象    bind()方法可以改变this指向 也有其他的改变this指向方法 就不多讲 

 

target.onclick = function(){

  "use strict"

  setInterval(function(){console.log(this)},100);  

}

 如果加上这个呢  就会报错 因为严格模式下不允许指向window

讲的估计不是很清晰 希望各位大佬手下留情

posted on 2017-09-23 20:23  光明顶大佬  阅读(267)  评论(0编辑  收藏  举报