16.说一说call apply bind的作用和区别?
得分点:
①
bind改变this指向不直接调用、
②call和apply改变this指向直接调用、
③apply接收第二个参数为数组、
④call用于对象的继承、
⑤ 伪数组转换成真数组、
⑥apply用于找出数组中的最大值和最小值以及数组合并、
⑦bind用于vue或者react框架中改变函数的this指向
标准回答
call、apply、bind的作用 :
都是改变函数运行时的this指向。
bind和call、apply在使用上有所不同:
①bind在改变this指向的时候,返回一个改变执行上下文的函数,不会立即执行函数,而是需要调用该函数的时候再调用即可,但是call和apply在改变this指向的同时执行了该函数。
②bind只接收一个参数,就是this指向的执行上文
③call、apply接收多个参数,第一个参数都是this指向的执行上文,后面的参数都是作为改变this指向的函数的参数。但是call和apply参数的格式不同,call是一个参数对应一个原函数的参数,但是apply第二个参数是数组,数组中每个元素代表函数接收的参数,数组有几个元素函数就接收几个元素。
加分回答
call的应用场景:
对象的继承,在子构造函数这种调用父构造函数,但是改变this指向,就可以继承父的属性
function superClass() {
this.a = 1
this.print = function() {
console.log(this.a)
}
}
function subClass() {
superClass.call(this) // 执行superClass,
}
并将superClass方法中的this指向subClass();借用Array原型链上的slice方法,把伪数组转换成真数组
let domNodes = Array.prototype.slice.call(document.getElementsByTagName("div"));
apply的应用场景:
Math.max,获取数组中最大、最小的一项
let max = Math.max.apply(null, array);
let min = Math.min.apply(null, array);
实现两个数组合并
let arr1 = [1, 2, 3];
let arr2 = [4, 5, 6];
Array.prototype.push.apply(arr1, arr2);
console.log(arr1); // [1, 2, 3, 4, 5, 6]
bind的应用场景:
在
vue或者react框架中,使用bind将定义的方法中的this指向当前类
💞💖💓💗每个时代,
✨🌟⭐️💫都悄悄犒赏会学习的人。

call、apply、bind都是用来改变函数执行时的this指向。call和apply会立即执行函数,bind则返回一个新函数供后续调用。call接受单个对象参数和按位置传递的参数,apply接受对象参数(通常是数组),bind则允许预先设置this并可传入参数。应用场景包括对象继承、数组操作和框架中方法的this绑定。

被折叠的 条评论
为什么被折叠?



