call、apply、bind的异同
作用 | 执行时间 | 用法 | 共同点 | |
---|---|---|---|---|
call | 调用其他对象的方法 | 立即执行 | a.call(b,...arr) | Function对象自带的方法, 可以改变this指向 |
apply | a.apply(b,arr) | |||
bind | 创建一个绑定函数 | 回调执行 | a.bind(b,args)() |
下面通过一个简单的实例来看三者的区别
name="window";
var a={
name:"aa",
fn:function(...a){
var sum=0;
a.map(v=>sum+=v);//累加
console.log("name = "+this.name);
console.log("sum = "+sum);
}
}
var b={name:'bb'};
/* name = bb
sum = 6*/
a.fn.call(b,1,2,3);
a.fn.apply(b,[1,2,3]);
a.fn.bind(b,1,2,3)();
/* name = window
sum = 6*/
a.fn.call(null,1,2,3);
a.fn.apply(undefined,[1,2,3]);
a.fn.bind(this,1,2,3)();