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
其内部是用柯里化实现的,下一节我们来介绍柯里化!