Hor*_*aan 25 javascript coding-style underscore.js
Underscore.js有两种调用函数的方法,我将其称为对象样式和函数样式.对象样式如下所示:
_(myObject).each(function (val, key) {
console.log(key, val);
});
Run Code Online (Sandbox Code Playgroud)
另一方面,函数式看起来像这样:
_.each(myObject, function (val, key) {
console.log(key, val);
});
Run Code Online (Sandbox Code Playgroud)
我很高兴在我的代码中使用对象样式调用,但是在某些时候,调用的对象样式从underscore.js文档中消失了(虽然对象样式调用仍然可以正常工作).我还看到了这个地方的提示(比如在backbone.js文档中),功能风格是"更好"或"首选".
那么,函数式调用是首选方法吗?如果是这样,有人可以解释这背后的原因吗?
更新: @ggozad部分回答了我的问题.但似乎我对underscore.js如何工作的理解是围绕版本0.4.2形成的.通过阅读underscore.js的更改历史记录,您可以看到1.2.4版本的此条目:
你现在可以(也可能应该)写
_.chain(list)而不是_(list).chain().
我想知道你为什么要写_.chain(list)而不是_(list).chain().
Rus*_*vis 32
@ggozad的回答实际上是非常误导的.面向对象的风格与链接无关.给出的例子:
_([1,2,3]).map(function (item) { return item * 2; }).map(function (item) { return item*3;});
Run Code Online (Sandbox Code Playgroud)
实际上根本没有使用下划线链接!它只能工作,因为内置的JS数组对象有自己的map()函数.尝试一个不是内置的功能(如shuffle),你会看到它中断:
_([1,2,3]).shuffle().shuffle();
Run Code Online (Sandbox Code Playgroud)
获得下划线链接的唯一方法是调用chain(),您可以使用任一样式(OO或函数)进行调用.
至于文档说你应该使用的原因_.chain,我猜它只是一种风格偏好.我在GitHub上打开了一个问题进行澄清.