bind方法的實(shí)現(xiàn)

一、bind的作用

? ? |--案例:

報(bào)錯(cuò):非法的調(diào)用

? ? |--錯(cuò)誤分析:write方法是document對(duì)象下的,將write方法賦值給變量dw,dw將成為window下的一個(gè)方法,
? ? 調(diào)用dw相當(dāng)于window.dw,此時(shí)dw里的this已經(jīng)指向了window而不是document。所以報(bào)錯(cuò)。
? ? |--如何解決:通過bind來改變this的指向(指向document)

通過bind改變this指向

二、bind的使用之綁定函數(shù)

? ? |--最基本的用法:創(chuàng)建一個(gè)函數(shù)(返回值:新函數(shù)),使新函數(shù)永久綁定this為指定對(duì)象(第一個(gè)參數(shù)),如果不做bind處理,函數(shù)會(huì)丟失原來的對(duì)象。
? ? |--案例:

bind使新函數(shù)this綁定為obj

三、bind的使用之預(yù)定義參數(shù)

? ? |--可以為新函數(shù)預(yù)定義參數(shù),調(diào)用的時(shí)候傳入其他參數(shù)即可。
? ? |--案例:

調(diào)用newList默認(rèn)參數(shù)37

四、bind的使用之和setTimeout一起使用

? ? |--示例:

setTimeout里的this指向window

? ? |--解決辦法:

綁定定時(shí)器內(nèi)部this為Person

五、bind和構(gòu)造函數(shù)一起使用

? ? |--構(gòu)造函數(shù)1.bind(null/{})返回一個(gè)新的構(gòu)造函數(shù),兩個(gè)構(gòu)造函數(shù)共用一個(gè)原型。
? ? |--示例:

兩個(gè)構(gòu)造函數(shù)共用一個(gè)原型

六、使用bind將類數(shù)組轉(zhuǎn)為數(shù)組

? ? |--示例:使用call和bind

call和bind

七、自己實(shí)現(xiàn)bind函數(shù)

? ? |--原因:一些低版本瀏覽器不支持bind方法,這時(shí)就要自己實(shí)現(xiàn)bind方法。
? ? |--實(shí)現(xiàn):

在Function的原型添加自定義bind

八、帶參數(shù)的bind實(shí)現(xiàn)

? ? |--示例:

帶參數(shù)的bind實(shí)現(xiàn)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容