bind()方法創建一個新的函數, 當被調用時,將其this關鍵字設置為提供的值,在調用新函數時,在任何提供之前提供一個給定的參數序列。
fun.bind(thisArg[,arg1[,arg2[, ...]]])
參數:
thisArg:當綁定函數被調用時,該參數會作為原函數運行時的this?指向。當使用new 操作符調用綁定函數時,該參數無效。
arg1, arg2, ... : 當綁定函數被調用時,這些參數將置于實參之前傳遞給被綁定的方法。
返回值:
?返回由指定的this值和初始化參數改造的原函數拷貝
創建綁定函數
this.x = 9;
var module = {
????x: 81,
????getX: function() { return this.x; }
};
module.getX(); // 返回 81
var retrieveX = module.getX;
retrieveX(); // 返回 9, 在這種情況下,"this"指向全局作用域
var boundGetX = retrieveX.bind(module); // 創建一個新函數,將"this"綁定到module對象
boundGetX(); // 返回 81
偏函數
bind()的另一個最簡單的用法是使一個函數擁有預設的初始參數
function list() {
? return Array.prototype.slice.call(arguments);
}
var list1 = list(1, 2, 3); // [1, 2, 3]
// Create a function with a preset leading argument
var leadingThirtysevenList = list.bind(undefined, 37);
var list2 = leadingThirtysevenList(); // [37]
var list3 = leadingThirtysevenList(1, 2, 3); // [37, 1, 2, 3]