关于underscore1.3.3中_.bind的一些小疑问
最近学习underscore1.3.3的源代码,看到了_.bind的实现,有些不解。
具体代码如图:
我是从以下这段代码开始有不解的:
我看到一些人说var result = func.apply(self, args.concat(slice.call(arguments)))的作用是将function强制转换成一个类的构造函数,这如何理解呢?然后为什么要判断result的类型呢,是基于什么样的考虑呢?利用一个ctor构造函数又是处于什么样的考虑,希望有前辈可以解答一下,谢谢
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
首先,bind方法返回的是一个函数,所以如果有如下行为,则不能达到预期:
截取MDN中对bind方法的描述:
bind的目的是关联一个执行上下文,而对于构造函数而言,返回的新函数破坏了原来的原型之间的关系。所以会有一个特殊处理:
那么下面的代码就是在作为构造函数被调用时,因为我们依然希望返回的是一个func对象,即保留原本的原型关系,所以本来是可以这样的:
上面这句的语法是错误的,我即希望用
new
,又希望动态传参,那么就只要借用一个额外的变量了。这样就即保留了原型关系,又调用了构造函数,似乎完成了,但是构造函数被调用时虽然关联了上下文为self,但是还是有区别:
所以为了彻底模拟这个行为做了最后的判断。
如果有其他看法,欢迎继续交流。
判断result包括临时的ctor都是在模拟new func()的行为,让bind后的结果在被new的时候依然按预期工作