基本语法:
function.call(thisArg, arg1, arg2, ...)
function.apply(thisArg, [argsArray])
function.bind(thisArg)
相同点:call、apply、bind都可以改变this的指向
不同点:
返回值不同
call、apply返回的是函数的调用
bind返回的是函数
let a = {
name:'a',
age:15,
say(){
console.log(`name:${this.name},age:${this.age}`);
}
}
let b = {
name:'b',
age:20,
}
a.say.call(b);//name:b,age:20
a.say.apply(b);//name:b,age:20
a.say.bind(b);//没有打印任何东西,因为得到的是say函数,但没有调用
a.say.bind(b)();//name:b,age:20
传参方式不同
call传参是枚举参数
apply传参是传参数数组
bind在调用的时候传参
let a = {
name:'a',
age:15,
say(job,hobby){
console.log(`name:${this.name},age:${this.age},job:${job},hobby:${hobby}`);
}
}
let b = {
name:'b',
age:20,
}
a.say.call(b,'student','唱、跳、rap')//name:b,age:20,job:student,hobby:唱、跳、rap
a.say.apply(b,['student','唱、跳、rap'])//name:b,age:20,job:student,hobby:唱、跳、rap
a.say.bind(b)('student','唱、跳、rap')//name:b,age:20,job:student,hobby:唱、跳、rap
网友评论