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)();