我很好奇,_.chain
ing function is implemented以及它如何(或更好,爲什麼)按照它的方式工作。下劃線鏈接內部工作
特別是我的問題是每個功能的包裝發生在哪裏。假設我使用_.chain(someArray).filter(...);
當我步入功能,我可以看到,過濾功能得到了改造成類似
function() {
var args = [this._wrapped]; //the data from chain(...)
push.apply(args, arguments); //push to the (?) array
return result.call(this, func.apply(_, args)); //?? where are these coming from?
}
我可以看到該函數有3個閉包在它的範圍(比較這對un-chained function,展示了函數的定義,而不全部關閉,以它的原始功能)
第一個是find function本身,第二"the safe reference to the object itself"和下劃線類本身的三分之一。
當調用_.chain()
時,如何和在哪裏(代碼方式)進行轉換(創建範圍等)。我可以看到
//http://underscorejs.org/docs/underscore.html#section-139
_.chain = function(obj) {
return _(obj).chain();
};
被調用,這去
//http://underscorejs.org/docs/underscore.html#section-145
//...
chain: function() {
this._chain = true;
return this;
},
//...
然後我卡。我無法弄清楚那裏會發生什麼。我認爲魔術發生在constructor內部,但我似乎無法弄清楚閉包的附加創建在哪裏進來。所有功能本身都沒有顯示任何纏繞的跡象,連鎖調用看起來沒有像它包裝的東西。 result
似乎在那裏,但我不知道它來自哪裏。那麼,在哪裏以及如何發生?
http://underscorejs.org/docs/underscore.html#section-143最後,您可以看到所有原型方法的添加位置 – Zirak