链式调用
Last updated
Was this helpful?
Last updated
Was this helpful?
回顾一下:
链式调用例子 : _.chain([1,2,3,4]).filter((num)=>!num%2).map((num)=>num*num).value();
就依照上面那个函数走好了
为了实现链式调用,我们首先需要调用_.chain()
处理以下我们的参数
源码很简单,我们把传入的obj处理了一下,结合上面的_
函数,回到顶部,传入[1,2,3,4]
,返回值会是
然后我们需要一个函数来判断我们刚添加的_chain
属性,也即 chainResult()
然后,在我们在mixin()
中调用即可:chainResult(this,func.apply(_,args));
回顾一下:
我们在调用_.prototype
上的函数时,会跳转到mixin()
中也即我们定义原型链函数的地方,然后return的时候会调用chainResult
函数,然后返回值就会被处理,也即被调用的函数都会返回一个带有_chain : true
的对象。
但是我们最后的函数返回值依旧是一个对象,我们需要的是里面的_wrapped
,这里就需要我们的_.value()
了:
小节结语,这里,我们完成了一个函数库最基础的布置,下面的章节我们开始向我们的函数库填充抽象出的可复用函数啦!