js中call和apply的用法和区别

基本用法

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指向的对象,第二个参数为调用方法传递的参数,只支持数组格式