簡體   English   中英

鏈接Underscore.js函數的首選方法是什么?

[英]What is the preferred way of chaining Underscore.js functions?

Underscore.js有兩種調用函數的方法,我將其稱為對象樣式和函數樣式。 對象樣式如下所示:

_(myObject).each(function (val, key) {
  console.log(key, val);
});

另一方面,函數式看起來像這樣:

_.each(myObject, function (val, key) {
  console.log(key, val);
});

我很高興在我的代碼中使用對象樣式調用,但是在某些時候,調用的對象樣式從underscore.js文檔中消失了(雖然對象樣式調用仍然可以正常工作)。 我還看到了這個地方的提示(比如在backbone.js文檔中),功能風格是“更好”或“首選”。

那么,函數式調用是首選方法嗎? 如果是這樣,有人可以解釋這背后的原因嗎?

更新: @ggozad部分回答了我的問題。 但似乎我對underscore.js如何工作的理解是圍繞版本0.4.2形成的。 通過閱讀underscore.js的更改歷史記錄,您可以看到1.2.4版本的此條目:

您現在可以(也可能應該)編寫_.chain(list)而不是_(list).chain()

我想知道你為什么要編寫_.chain(list)而不是_(list).chain()

@ggozad的回答實際上是非常誤導的。 面向對象的風格與鏈接無關。 給出的例子:

_([1,2,3]).map(function (item) { return item * 2; }).map(function (item) { return item*3;});

實際上根本沒有使用下划線鏈接! 它只能工作,因為內置的JS數組對象有自己的map()函數。 嘗試一個不是內置的功能(如shuffle),你會看到它中斷:

_([1,2,3]).shuffle().shuffle();

獲得下划線鏈接的唯一方法是調用chain() ,您可以使用任一樣式(OO或函數)。

至於為什么文檔說你應該使用_.chain ,我猜它只是一種風格偏好。 在GitHub上打開了一個問題進行澄清。

_用作函數時,它實際上包裝了參數。 包裝器提供所有正常的下划線功能。

它與樣式的區別在於,使用OOP樣式(或定義中的對象樣式)是它生成可鏈接的包裝對象。 所以很容易做到:

_([1,2,3]).map(function (item) { return item * 2; }).map(function (item) { return item*3;});

相當於:

_.map(_.map([1,2,3], function (item) { return item * 2 }), function (item) { return item * 3 });

這可能不太清楚。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM