call和apply都是function原型上的方法,而每一个函数作为function一个实例,所以可以调取原型上的call和apply方法。
call方法的性能通常略优于apply方法,尤其是在参数数量较多时。这是因为call方法可以直接传递每个参数,而无需进行额外的数组处理。因此,在性能敏感的应用场景中,可能会倾向于使用call方法
不同点:传参的类别不同
call 第二个参数开始接受一个参数列表
call方法:
语法:call([thisObj[,arg1[, arg2[, [,.argN]]]]])
定义:调用一个对象的一个方法,以另一个对象替换当前对象
apply 第二个参数开始接受一个参数数组
apply方法:
语法:apply([thisObj[,argArray]])
定义:应用某一对象的一个方法,用另一个对象替换当前对象。
let obj = {
age:19
}
function foo(a,b,c) {
console.log(a, b, c);
}
// foo()
foo.apply(obj,[1,2,3])
// foo在执行的过程中,foo中的this指向谁
// call和apply的作用就是,修改函数执行的this
// foo.call(obj,1,2,3)