首發(fā)于搞起博客,示例代碼見(jiàn)原文中
bind方法澳叉,寫(xiě)javascript的肯定都見(jiàn)過(guò)隙咸,我也是,但是成洗,不是經(jīng)常用的話五督,基本上過(guò)一段時(shí)間就會(huì)模糊了,所以瓶殃,決定把它轉(zhuǎn)化成圖像充包,估計(jì)比較容易記憶。
概念
我們來(lái)看看MSDN上關(guān)于javascript bind函數(shù)的解釋:
對(duì)于給定函數(shù)遥椿,創(chuàng)建具有與原始函數(shù)相同的主體的綁定函數(shù)基矮。 在綁定函數(shù)中,this 對(duì)象將解析為傳入的對(duì)象冠场。 綁定函數(shù)具有指定的初始參數(shù)家浇。
哈哈哈哈,是不是懵逼了碴裙?
莫慌钢悲,我們慢慢來(lái)看,看看用法先:
用法
function.bind(thisArg[,arg1[,arg2[,argN]]])
參數(shù)
function 必選舔株。 一個(gè)函數(shù)對(duì)象莺琳。
thisArg 必選。 this 關(guān)鍵字可在新函數(shù)中引用的對(duì)象载慈。
arg1[,arg2[,argN]]] 可選惭等。 要傳遞到新函數(shù)的參數(shù)的列表。
返回值
與 function 函數(shù)相同的新函數(shù)(注意是新函數(shù)办铡!)辞做,thisArg 對(duì)象和初始參數(shù)除外。
異常
如果指定的 function 不是函數(shù)寡具,則將引發(fā)TypeError異常秤茅。
看到這里我們基本對(duì)bind方法的使用有個(gè)初步認(rèn)識(shí)了,那先來(lái)看看具體示例再分析分析晒杈。
示例
this綁定
好了,這個(gè)簡(jiǎn)單的示例看完了孔厉,我們知道了拯钻,使用bind將一個(gè)對(duì)象綁定到某個(gè)函數(shù)中帖努,這個(gè)函數(shù)中所使用的this就會(huì)指向綁上去的函數(shù)了,不羅嗦了粪般,畫(huà)個(gè)圖理解拼余。
參數(shù)綁定
在參數(shù)中還可以有幾個(gè)參數(shù)帶進(jìn)來(lái)arg1[,arg2[,argN]]]
// 又是定義一個(gè)函數(shù),這次是4個(gè)參數(shù)
vardisplayArgs=function(val1,val2,val3,val4){
? ? document.write(val1+" "+val2+" "+val3+" "+val4);
}
varemptyObject={};
// 使用bind亩歹,產(chǎn)生一個(gè)新函數(shù)
// 這個(gè)新函數(shù)的第一第二個(gè)參數(shù)已經(jīng)定死了為這兩個(gè)匙监,再有參數(shù)往后排vardisplayArgs2=displayArgs.bind(emptyObject,12,"a");
// 這里就是兩個(gè)排隊(duì)的參數(shù)了displayArgs2("b","c");
// 輸出: 12 a b c
恩,知道小作,上圖再說(shuō)對(duì)吧
上圖可以看出bind時(shí)傳入的參數(shù)亭姥,在新函數(shù)中作為最先使用的參數(shù),但是它并沒(méi)有改變?cè)瘮?shù)參數(shù)的個(gè)數(shù)顾稀。
不知道看了兩幅圖达罗,記住了bind方法沒(méi)?