实现一个原生bind

258 阅读1分钟

HEY,小伙伴们!

看标题,bind()方法,主要就是将函数绑定到某个对象上,bind()是创建一个函数,函数体内的this对象的值会被绑定到传入bind()的第一个参数的值,简单来讲就是可以改变this指向; 我们现在来实现一个原生bind吧!

//实现一个bind函数
Function.prototype.new_bind=function(obj,arg){
  var self=this,
      arg0=Array.prototype.shift.call(arguments)//获取返回数组的第一个元素
      args=Array.prototype.slice.call(arguments)//剩余参数对象返回数组
      return function(){
      self.apply(arg0,Array.prototype.concat.call(args,Array.prototype.slice.call(arguments)));
      }
}

此时我们调用下这个bind()

function first(a,b,c){console.log( this.name+a+b+c)}
var second={name:'aaa'}
first.new_bind(second,'bbb','ccc')('hello')
//输出aaabbbccchello

其内部是用柯里化实现的,下一节我们来介绍柯里化!