忘了原作者是谁了 自己也添加了一些东西 勉强可以观看一下
元素就不写了 可以自己添一下试试
先看这段代码
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
讲的估计不是很清晰 希望各位大佬手下留情