原生JS實現bind方法

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;
}
複製代碼
相關文章
相關標籤/搜索