利用闭包实现bind函数

bind函数是Function.prototype里的一个函数,我们试着重写他,看一下他的原理。只是简单化的实现,

bind函数的作用是给函数绑定一个对象,然后返回一个新的函数,但是这个函数没有prototype属性(这里并没有实现这个功能)。

其实bind的大致原理就是利用闭包把一些信息(例如需要绑定的对象和传入的函数参数等)保存在内存中,然后返回一个新的函数,新的函数调用时使用的信息是之前调用bind函数时保存的一些信息(上下文对象和参数等),和apply其实有些相似,但是bind还可以先传入一个参数。具体区别,有待深入研究。下面通过代码看一下bind的简单实现。


a={i:2}
function fun(x,y){alert(x+y);alert(this.i)}
 
 function bind(){
 var ob=this;//保存当前调用的对象
 var arg=Array.prototype.slice.call(arguments,1);//提取参数,bind返回的新函数的参数可以先被赋值。例如fun函数的x可以在bind调用时就产生赋值(利用闭包保存),然后在调用返回的新函数时再赋其他的值
 var fn=arguments[0];//保存返回的新函数调用时的上下文对象
 return function(){

 ob.apply(fn,Array.prototype.concat(Array.prototype.slice.call(arguments),arg));

//返回的新函数

}

 }


 Function.prototype.bind=bind;//覆盖原型中的bind

 fun.bind(a,1)(2)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值