bind()
方法:
會創建一個新函數。當這個新函數被調用時,bind() 的第一個參數將作爲它運行時的 this,之後的一序列參數將會在傳遞的實參前傳入作爲它的參數。(來自於 MDN )
此外, bind
實現需要考慮實例化後對原型鏈的影響。
Function.prototype.mybind = function (context) {
if (typeof this !== "function") {
throw new Error(this + "is not a function");
}
var self = this;
var args = [];
for (var i = 1, len = arguments.length; i < len; i++) {
args.push(arguments[i]);
}
var fbound = function () {
var bindArgs = Array.prototype.slice.call(arguments);
self.apply(this instanceof self ? this : context, args.concat(bindArgs));
}
fbound.prototype = Object.create(self.prototype);
//返回的函數不僅要和 被調函數的函數體相同,也要繼承人家的原型鏈
return fbound;
}