首發于搞起博客,示例代碼見原文中
bind方法,寫javascript的肯定都見過,我也是,但是,不是經常用的話,基本上過一段時間就會模糊了,所以,決定把它轉化成圖像,估計比較容易記憶。
概念
我們來看看MSDN上關于javascript bind函數的解釋:
對于給定函數,創建具有與原始函數相同的主體的綁定函數。 在綁定函數中,this 對象將解析為傳入的對象。 綁定函數具有指定的初始參數。
哈哈哈哈,是不是懵逼了?
莫慌,我們慢慢來看,看看用法先:
用法
function.bind(thisArg[,arg1[,arg2[,argN]]])
參數
function 必選。 一個函數對象。
thisArg 必選。 this 關鍵字可在新函數中引用的對象。
arg1[,arg2[,argN]]] 可選。 要傳遞到新函數的參數的列表。
返回值
與 function 函數相同的新函數(注意是新函數!),thisArg 對象和初始參數除外。
異常
如果指定的 function 不是函數,則將引發TypeError異常。
看到這里我們基本對bind方法的使用有個初步認識了,那先來看看具體示例再分析分析。
示例
this綁定
好了,這個簡單的示例看完了,我們知道了,使用bind將一個對象綁定到某個函數中,這個函數中所使用的this就會指向綁上去的函數了,不羅嗦了,畫個圖理解。
參數綁定
在參數中還可以有幾個參數帶進來arg1[,arg2[,argN]]]
// 又是定義一個函數,這次是4個參數
vardisplayArgs=function(val1,val2,val3,val4){
? ? document.write(val1+" "+val2+" "+val3+" "+val4);
}
varemptyObject={};
// 使用bind,產生一個新函數
// 這個新函數的第一第二個參數已經定死了為這兩個,再有參數往后排vardisplayArgs2=displayArgs.bind(emptyObject,12,"a");
// 這里就是兩個排隊的參數了displayArgs2("b","c");
// 輸出: 12 a b c
恩,知道,上圖再說對吧
上圖可以看出bind時傳入的參數,在新函數中作為最先使用的參數,但是它并沒有改變原函數參數的個數。
不知道看了兩幅圖,記住了bind方法沒?