链式调用如何实现?
一般情况下我们使用的都是单个API,在特殊情况下也需要将一个数值进行多次处理,这个时候优雅的链式调用可以很方便的将其转化。
什么是链式调用?
即一次性对数据进行多次处理。
没有链式调用的代码看上去会是这个样子:
obj.setTitle('title')
obj.setStyle('style')
obj.map(v => {})
obj.min()
采用链式调用:
obj.setTitle('title').setStyle('style').map(v => {}).min()
看上去是不是没有那么LOW了。
underscore中的链式调用
underscore中的链式调用的实现进行了一下几个步骤的处理:
- 在underscore对象实现前,记录数据来源
_wrapped
- 内部实现一个方法
_.chain
给实例添加_.chain
属性为true
- 将内部实现的API都挂载到_.prototype上
funs.apply(_, args)
将_wrapped
继续传给下个调用- 每一个API返回当前的链式结果,以便判断链式是否终端
- 想要中断链式调用,可以在最后调用
.value
方法,如下:
_.chain([1, 2, 3]).reverse().value();
JQUERY中的链式调用
jquery中的链式调用实现方式是,每一个API都返回jquery的实例对象。