call,apply,bind 指定this

一句話介紹call:使用一個指定的this和若干個指定的參數(shù)調(diào)用某個函數(shù)或方法。

在講解call顯示綁定之前,我們先想一下call做了哪些事兒。

  • 將函數(shù)設(shè)為對象的屬性
  • 指定函數(shù)的this,并進(jìn)行傳參
  • 執(zhí)行&刪除函數(shù)
  • 判定如果沒有指定要綁定的this,非嚴(yán)格模式下默認(rèn)指向全局對象
    可以看到值調(diào)用call方法后,會將this綁定到指定對象,所以稱為顯示綁定
  console.log(this.name);
}

var obj = {
  name: 'Heternally',
}

var obj1 = {
  name: 'Heternally1'
}

var name = 'zl';

foo.call(obj); // Heternally  調(diào)用call方法后強(qiáng)行將foo函數(shù)的this指向來obj對象上

foo.call(obj).call(obj1); // Heternally  多次調(diào)用call方法,以第一次為準(zhǔn)

foo.call(obj1).call(obj); // Heternally1

foo.call();// zl 沒有傳入指定對象,所以this默認(rèn)指向全局對象

如果call、apple、bind的綁定對象是null或者undefined,那么實(shí)際上在調(diào)用時這些值都會被忽略,所以使用的是默認(rèn)綁定規(guī)則

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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