1.谁调用我,我就指向谁。
- 在页面上直接打印一个consle.log(this),这个this会指向window对象。
- 如果写一个函数:打印this,该this会指向window。因为这个函数是挂载在这个window对象上的。
- 对象obj的this指向的是对象,因为obj在调用他
- 定时器(setInterval和setTimeout)2秒钟后是窗口给你调用了 ,this指向的是window对象。
此时this指向的是box这个节点,事件源
在构造函数中,this指向的是实例对象。(new的过程就叫实例化)
改变this指向:apply,call,bind
以下两个This我们都知道他会指向自己所在的那个obj,我们如何让第一个this指向obj2呢?
obj1.getName.call(obj2)
obj1.getName.apply(obj2)
都可以改变this的指向,那么这两个函数有什么区别呢?
obj1.getName.call(obj2,123,3,4,2,4)接受多个参数
obj1.getName.apply(obj2,[123,23])第二个参数只能是数组
这里的bind用法会有一点特殊,不能像前面两个那样用。他要返回一个函数,并且要调用函数才会改变this的指向。他支持多个参数!
使用场景:不希望立即执行
var fun1=obj.getName.bind(obj2)
fun1()