bind方法建立一個新函數。調用新函數時,this指向給定的對象,而且將給定的參數列表做爲原函數的參數序列的前若干項。bash
當使用new操做符建立bind函數的實例時,bind函數變成構造器,給定的對象參數失效,其他參數仍然有效。app
function myBind(){
var self = this;
// 第一個對象參數
var context = Array.prototype.shift.call(arguments);
// 其他參數
var bindArgs = Array.prototype.slice.call(arguments);
// 臨時函數
var fTemp = function(){};
function fn(){
// 合併綁定參數以及調用時參數
var args = bindArgs.concat(Array.prototype.slice.call(arguments));
// 原函數執行(this指向給定對象)
self.apply(context, args);
}
// 臨時函數prototype指向原函數prototype
fTemp.prototype = self.prototype;
// 新函數prototype設爲臨時函數的實例對象(當原函數使用New建立實例)
fn.prototype = new fTemp();
return fn;
}
複製代碼