JS中call aplly bind的區別
call、apply、bind的作用是改變函數運行時this的指向。
1. call()的第一個參數為this綁定的對象,后面傳入一串參數列表。
當第一參數為null或undefined時,默認指向window對象。
2. apply()和call()類似,唯一的不同點在于第二個參數傳入一個參數數組。
當第一參數為null或undefined時,默認指向window對象。
3. bind()和call()類似,不同點一bind()不會立即執行,而是返回一個改變了this后的函數
示例:
let obj1 = { name: 'obj1', fn1(param) { console.log(this.name, param); } } let obj2 = { name: 'obj2', fn1(param) { console.log(this.name, param); } } obj1.fn1('param1') //輸出 obj1 param1 obj1.fn1.call(obj1, 'param1') //輸出 obj1 param1 obj1.fn1.call(obj2, 'param1') //輸出 obj2 param1 //apply的第二個參數為參數數組 obj1.fn1.apply(obj2, ['param1']) //輸出 obj2 param1 //bind方法返回一個函數,但不會執行,這個函數的參數繼承bind方法的參數 let fun = obj1.fn1.bind(obj2, 'param') fun() //輸出 obj2 param1