写一个bind方法

对bind,apply,call的用发理解还不够深刻。

手写一个bind方法

//context为需要被绑定上的对象,arguments是参数
Function.prototype.bind = function(context){
  var self = this; //this => Function
  return function(){
      return self.apply(context,arguments)
  }
}

再复杂一点

//context为需要被绑定上的对象,arguments是参数
Function.prototype.bind = function(){
  var self = this; //this => Function
  var context = [].shift.call(arguments); //arguments 的第一个为需要绑定的this上下文
  var args = [].slice.call(arguments)// arguments除了第一个,成为一个数组
  return function(){
      return self.apply(context,[].concat.call(args,[].slice.call(arguments)))
  }
}
//运行
var obj = {name: 'shaojingjing'}
var func = function(a,b,c,d){
  alert(this.name); // shaojingjing
  alert([a,b,c,d]) // [1,2,3,44]
}.bind(obj,1,2).(3,4)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容