javaScript 中通过call或者apply用来代替另一个对象调用一个方法,将一个函数的对象上下文从初始的上下文改变为指定的新对象。简单的说就是改变函数中this的指向
基本用法
function Fun(){
this.name = "fun";
this.say = function(){
console.log(this.name);
console.log(arguments);
}
}
let people = {
name:"test"
}
let f = new Fun();
f.say.call(people,[1,2,3],1,3,'hello')
f.say.apply(people,[1,3]);
区别
运行上述代码,可以看出,调用Fun中的say方法用call和apply都可以改变this.name 的值为people对象的name值,两者的区别在于
call支持多个参数
f.say.call(people,[1,2,3],1,3,'hello') //第一个参数为需要改变this指向的对象,其他参数都是调用方法传递进去的参数
apply只支持两个参数
f.say.apply(people,[1,3]);//第一个参数为需要改变this指向的对象,第二个参数为调用方法传递的参数,只支持数组格式