1. 函数this指向 : 谁‘调用’我,我就指向谁
1.1 普通函数: 函数名() this -> window
1.2 构造函数: new 函数名() this -> new创建实例
1.3 对象方法: 对象名.方法名() this -> 对象
2. 函数this指向 : 谁‘调用’我,我就指向谁
2.1 普通函数: 函数名() this -> window
2.2 构造函数: new 函数名() this -> new创建实例
2.3 对象方法: 对象名.方法名() this -> 对象
3. 默认情况下,函数内部的this是固定的,无法动态修改。 如果想要动态修改函数this指向,需要使用函数上下文调用。
* 函数上下文 : 函数作用域
4. 函数上下文调用 : 动态修改this指向
4.1 函数名.call()(修改的this,参数1,参数2…………)
4.2函数名.apply()(修改的this, 数组/伪数组 )
伪数组 : 有数组三要素(元素、下标、长度) , 但是不能使用数组的方法
伪数组本质是对象
4.3函数名.bind()(修改的this)
总结: call() apply() bind()三者异同点
相同点: 作用一致,都是修改this指向
不同点:
(1)传参方式不同 : call是单个传参, apply是数组/伪数组传参
(2)执行机制不同 : call和apply立即执行函数, bind不会立即执行,而是返回一个修改this之后的新函数。
( bind一般用于修改不会立即执行的函数: 定时器函数 , 事件处理函数。
定时器函数中的this默认是window, 要想修改就需要用 bind)