如何實現一個bind方法,手寫一個bind

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;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章