沒圖說個錘子之js bind方法

首發於搞起博客javascript

bind方法,寫javascript的確定都見過,我也是,可是,不是常常用的話,基本上過一段時間就會模糊了,因此,決定把它轉化成圖像,估計比較容易記憶。java

概念

咱們來看看MSDN上關於javascript bind函數的解釋:函數

對於給定函數,建立具備與原始函數相同的主體的綁定函數。 在綁定函數中,this 對象將解析爲傳入的對象。 綁定函數具備指定的初始參數。this

哈哈哈哈,是否是懵逼了?spa

莫慌,咱們慢慢來看,看看用法先:code

用法

function.bind(thisArg[,arg1[,arg2[,argN]]])對象

參數

  • function
    必選。 一個函數對象。
  • thisArg
    必選。 this 關鍵字可在新函數中引用的對象。
  • arg1[,arg2[,argN]]]
    可選。 要傳遞到新函數的參數的列表。

返回值

與 function 函數相同的新函數(注意是新函數!),thisArg 對象初始參數除外。blog

異常

若是指定的 function 不是函數,則將引起 TypeError 異常。ip

看到這裏咱們基本對bind方法的使用有個初步認識了,那先來看看具體示例再分析分析。rem

示例

this綁定

/**
 * 定義初始的函數
 * 這個函數的功能很簡單,就是判斷數字是否在某個範圍
 */
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就會指向綁上去的函數了,不羅嗦了,畫個圖理解。
function調用bind方法

再看個稍微有點不一樣的例子,其實也差很少:

// 建立一個帶有剛纔那個方法的對象,
// 而且方法調用當前這個對象中的最大值和最小值
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時傳入的參數,在新函數中做爲最早使用的參數,可是它並沒有改變原函數參數的個數

不知道看了兩幅圖,記住了bind方法沒?

相關文章
相關標籤/搜索