一、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)