有没有好的underscore.js替代品可以扩展核心js类?

6

我发现 _.something(somevar, some_function_or_other_thing); 这种“语法”相当丑陋。有哪些好的替代方案可以使用类似 Ruby 的迭代器和类似的东西呢:

10..times(function(i) {
   console.log(i);
});

uppercasefoobar = ["foo", "bar"].each(function(i) {
    return i.toUpperCase();
});

此外,我正在使用node.js,因此应将重点放在代码而非DOM内容上。

很可能什么都没有……下划线之所以这样做是有原因的。这被认为是一种非常糟糕的想法,因为这样会污染内置类型。实际上,你正在创建自己的特殊版本的语言,而且a)没有人能够理解,b)可能会破坏任何给定的插件/库。 - user229044
另外,你的 each 版本实际上是一个 map。还有,10.times 在 JavaScript 中永远不会起作用,那是语法错误,也没有库可以改变语言语法的限制。如果你想在 JavaScript 中使用 Ruby 语法,请考虑使用 CoffeeScript。 - user229044
@meagar 他只是提供了一个例子。 - azz
2
如果你正在寻找Ruby风格的编程语言,我建议你尝试一下CoffeeScript。 - Zhihao
此外,如果你真的非常喜欢Ruby,你应该看看CoffeeScript:http://coffeescript.org/总的来说,我不是Ruby的铁杆粉丝,但我强烈建议在使用CoffeeScript之前,如果你对JavaScript还不熟悉,应该先掌握好JavaScript的基础知识,以便更好地理解这门语言的本质。 - Vinay
啊,该死。显然我应该读注释。刚刚才意识到你在使用CS。:-P - Vinay
3个回答

5

惊讶于没有人提到Lo-Dash。Lo-Dash是Underscore的超集,添加了许多方法。John-David Dalton(Lo-Dash的创建者)在回答SO问题这里时解释了两个库之间的关键差异。

编辑:发现一篇详细的博客文章“Say hello to Lo-Dash”,详细介绍了该库的背景以及与其他所谓的'js实用工具'的比较。


1
同意这个观点,现在 Lo-Dash 已经取代了 underscore,并且在各方面都更加优秀。它还是一个即插即用的替代品,因此您无需进行任何代码更改,只需将 underscore 替换为 Lo-Dash,就可以立即使用! - Roy

4

看起来你正在寻找Array.prototype.map方法。

uppercasefoobar = ["foo", "bar"].map(function(i) {
    return i.toUpperCase();
});
// uppercasefoobar == ["FOO", "BAR"]

使用 underscore.js,你也可以这样写:

...

_.range(10).forEach(function(i) {
    console.log(i);
});

编辑 您也可以使用:

_(3).times(function(i) {
    console.log(i);
});

虽然不如Ruby语法美观,但它能完成工作。

总的来说,underscore提供了大多数函数的面向对象版本,其中:

_.something(variable, params);

等同于

_(variable).something(params);

我只是提供了一个像Ruby语法的例子,可以被该JS库实现(但我猜这个已经在ECMAScript中了)。 - phillips1012
@phillips1012还为大多数函数提供了面向对象的封装,详见我的编辑答案。 - azz

2

我自己找到了一个!http://sugarjs.com/

(是的,我知道扩展原生类本质上相当于分叉语言...这就是我的动机...)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接