Javascript收集前端面试

写一个bind方法

2016-09-23  本文已影响700人  打不过就加入他

对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)
上一篇 下一篇

猜你喜欢

热点阅读