JS中call aplly bind的區(qū)別

call、applybind的作用是改變函數(shù)運(yùn)行時(shí)this的指向。

  • call()的第一個(gè)參數(shù)為this綁定的對(duì)象,后面?zhèn)魅?strong>一串參數(shù)列表。
    當(dāng)?shù)谝粎?shù)為nullundefined時(shí),默認(rèn)指向window對(duì)象。
  • apply()call()類似,唯一的不同點(diǎn)在于第二個(gè)參數(shù)傳入一個(gè)參數(shù)數(shù)組。
    當(dāng)?shù)谝粎?shù)為nullundefined時(shí),默認(rèn)指向window對(duì)象。
  • bind()call()類似,不同點(diǎn)一bind()不會(huì)立即執(zhí)行,而是返回一個(gè)改變了this后的函數(shù);
    不同點(diǎn)二在于當(dāng)你調(diào)用fn1 = fn.bind(newThis,param1)方法后,執(zhí)行fn2(prama2)時(shí),參數(shù)prama2會(huì)加到param1后面。
    示例代碼:
let obj1 = {
   name: 'obj1',
   fn1(param) {
       console.log(this.name, param);
   }
}
let obj2 = {
   name: 'obj2',
   fn1(param) {
       console.log(this.name, param);
   }
}
//一般調(diào)用
obj1.fn1('param1')                //輸出 obj1 param1
//call的第一參數(shù)為調(diào)用該函數(shù)的對(duì)象時(shí),等價(jià)于一般調(diào)用
obj1.fn1.call(obj1, 'param1')     //輸出 obj1 param1
//改變this指針,指向obj2
obj1.fn1.call(obj2, 'param1')     //輸出 obj2 param1

//apply的第二個(gè)參數(shù)為參數(shù)數(shù)組
obj1.fn1.apply(obj2, ['param1'])  //輸出 obj2 param1

//bind方法返回一個(gè)函數(shù),但不會(huì)執(zhí)行,這個(gè)函數(shù)的參數(shù)繼承bind方法的參數(shù)
let fun = obj1.fn1.bind(obj2, 'param')
fun()   //輸出 obj2 param1
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容