一.面试必问: call 和 apply 和 bind三者区别:
1.共同点:
1
.都是用来改变函数的this对象的指向的2.
第一个参数都是this要指定的对象3.
都可以利用后续参数传参4.
都可以上下文调用
2.不同点:
(1)
传参方式不同:call是按照顺序传参,apply是按照数组/伪数组传参(2)
执行机制不同:call和apply是会立即执行函数,而bind不会立即执行而是修改this的新函数
二.this常见的三种指向 与 call\apply\bind修改后的:
1.环境对象 this : 谁'调用'我,我就指向谁
普通函数; 函数名() this指向window
对象方法: 对象名.方法名() this指向对象
构造函数; new 函数名() this指向new创建实例对象
2.上下文调用 : 修改函数内部的this
2.1
函数名.call(修改后的this,形参1,形参2…………)2.2
函数名.apply(修改后的this, 数组或伪数组 )2.3
函数名.bind(修改后的this)
不会立即执行函数,而是得到一个修改this之后的新函数。
bind一般用于修改: 定时器函数、事件处理函数
注:let arr1=Array.from(obj) (代替了apply)
3. 应用场景: bind:一般作用于:定时器函数,事件处理函数
看得出来修改了this的指向,更换了里面this的内容