摘要:学习冴羽的博客研究 underscore 链式调用
jQuery
jQuery 之所以能实现链式调用,关键就在于通过 return this,返回调用对象,伪代码:
1 | // 获取DOM |
underscore
underscore 默认不使用链式调用,但是可以通过 _chain 函数来实现
_chain
1 | _.chain = function(obj) { |
使用 _chain 函数后,返回值调用原型上的方法后并不返回 this,也就是说返回值只能调用一次方法,无法接着调用其他方法了。但是,如果我们将调用方法的返回值再次传入 _chain 函数中,这样就可以再次调用原型上的方法。以此往复,不就可以一直链式调用下去了吗?
1 | var _ = function(obj) { |
像这样,每次调用方法后都将返回值传入 chainResult 处理一遍,就可以实现链式调用。但是如果将所有方法的返回值都修改成这样太麻烦,有更好的方法: _.prototype 上的函数是通过 _.mixin 函数将 _ 函数对象中的所有函数复制到 _.prototype 上的,所有的方法都经过 _.mixin 的复制操作。修改 _.mixin
1 | var ArrayProto = Array.prototype; |
_.value
调用方法返回的值都是一个含有 _wrapped 属性的对象,我们需要的便是这个值, _value 方法就是返回处理后结果的 _wrapped 属性值
1 | _.prototype.value = function() { |
最终代码
1 | (function () { |