js中闭包来实现bind函数的一段代码的分析

今天研究了一下bind函数,发现apply和call还可以有这样的妙用,顺便巩固复习了闭包。

 1 var first_object = { 
 2 num: 42 
 3 }; 
 4 var second_object = { 
 5 num: 24 
 6 }; 
 7 function multiply(mult) { 
 8 return this.num * mult; 
 9 } 
10 Function.prototype.bind = function(obj) { 
11 var method = this, 
12 temp = function() { 
13 return method.apply(obj, arguments); 
14 }; 
15 return temp; 
16 } 
17 var first_multiply = multiply.bind(first_object); 
18 first_multiply(5); // returns 42 * 5 
19 var second_multiply = multiply.bind(second_object); 
20 second_multiply(5); // returns 24 * 5 

在以上代码中,实现的最核心其实是

10 Function.prototype.bind = function(obj) { 
11 var method = this, 
12 temp = function() { 
13 return method.apply(obj, arguments); 
14 }; 

这段代码在Function.prototype上添加了一个名为bind的方法,该方法首先保存当前上下文,然后在闭包中使用这个上下文,闭包是一个函数,实现了可以返回保存的上下文和obj上下文相链接,bind方法返回闭包函数,闭包可使用bind方法的上下文,闭包返回的其实是obj的一个方法,这个方法有点特殊,它可以使用obj内部的变量,也可以接受外部传入的变量,所以这个闭包站在了外部和内部作用域的中间,这一切的形成依赖于闭包依赖于method说保存的那个this上下文,其实在下面的实例中,我们可以发现,这个method就是下面的multiply函数的上下文,因为multiply它是Function类(准确的说应该是funtion.prototype原型)的一个实例对象。

转载于:https://www.cnblogs.com/admos/p/4453259.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值