首發於搞起博客javascript
bind方法,寫javascript的確定都見過,我也是,可是,不是常常用的話,基本上過一段時間就會模糊了,因此,決定把它轉化成圖像,估計比較容易記憶。java
咱們來看看MSDN上關於javascript bind函數的解釋:函數
對於給定函數,建立具備與原始函數相同的主體的綁定函數。 在綁定函數中,this 對象將解析爲傳入的對象。 綁定函數具備指定的初始參數。this
哈哈哈哈,是否是懵逼了?spa
莫慌,咱們慢慢來看,看看用法先:code
function.bind(thisArg[,arg1[,arg2[,argN]]])
對象
與 function 函數相同的新函數
(注意是新函數!),thisArg 對象
和初始參數
除外。blog
若是指定的 function 不是函數,則將引起 TypeError
異常。ip
看到這裏咱們基本對bind方法的使用有個初步認識了,那先來看看具體示例再分析分析。rem
/** * 定義初始的函數 * 這個函數的功能很簡單,就是判斷數字是否在某個範圍 */ var checkNumericRange = function (value) { if (typeof value !== 'number') return false; else return value >= this.minimum && value <= this.maximum; } // 這裏的範圍將會被綁定到函數中的this值去 var range = { minimum: 10, maximum: 20 }; // 開始綁定! var boundCheckNumericRange = checkNumericRange.bind(range); // 使用一個數字來驗證下這個函數 var result = boundCheckNumericRange (12); document.write(result); // 輸出: true
好了,這個簡單的示例看完了,咱們知道了,使用bind將一個對象綁定到某個函數中,這個函數中所使用的this就會指向綁上去的函數了,不羅嗦了,畫個圖理解。
再看個稍微有點不一樣的例子,其實也差很少:
// 建立一個帶有剛纔那個方法的對象, // 而且方法調用當前這個對象中的最大值和最小值 var originalObject = { minimum: 50, maximum: 100, checkNumericRange: function (value) { if (typeof value !== 'number') return false; else return value >= this.minimum && value <= this.maximum; } } // 檢查10是否在範圍內 var result = originalObject.checkNumericRange(10); document.write(result + " "); // 輸出: false // 仍是一樣的配方,仍是熟悉的味道 var range = { minimum: 10, maximum: 20 }; // bind技能要正在引導... var boundObjectWithRange = originalObject.checkNumericRange.bind(range); // 看看此次的效果 var result = boundObjectWithRange(10); document.write(result); // 輸出: true, 有效了!
在參數中還能夠有幾個參數帶進來arg1[,arg2[,argN]]]
// 又是定義一個函數,此次是4個參數 var displayArgs = function (val1, val2, val3, val4) { document.write(val1 + " " + val2 + " " + val3 + " " + val4); } var emptyObject = {}; // 使用bind,產生一個新函數 // 這個新函數的第一第二個參數已經定死了爲這兩個,再有參數日後排 var displayArgs2 = displayArgs.bind(emptyObject, 12, "a"); // 這裏就是兩個排隊的參數了 displayArgs2("b", "c"); // 輸出: 12 a b c
恩,知道,上圖再說對吧
上圖能夠看出bind時傳入的參數,在新函數中做爲最早使用的參數,可是它並沒有改變原函數參數的個數
。
不知道看了兩幅圖,記住了bind方法沒?