为什么Underscore.js定义函数别名

时间:2014-02-06 11:36:53

标签: javascript prototypejs underscore.js

Underscore.js定义_.each (alias: forEach)_.map (alias: collect)等函数的别名,我不明白为什么。

我最初认为这是为了避免浏览器本身没有实现这些功能的问题,我的想法是调用[].map()会在IE7和8中引发错误,因为他们没有在本地实现它但是找到了没有问题,因为Underscore已经定义了这些。

然后我认为它可能与其他JS库(如Prototype)的冲突有关,这些库实现了类似命名的函数但后来意识到,在_.map的情况下,拥有别名实际上并没有产生影响实现.map.colelct实际上我一直在使用原型的实现(例如。this.collection.collect(...))。

到目前为止它似乎没有任何区别,它没有产生任何问题,但我真的想知道为什么会发生这种情况。

2 个答案:

答案 0 :(得分:5)

我想别名的目的是让库更熟悉具有不同背景的程序员(例如,在Ruby中使用collectinclude,在函数式语言中使用fold等)

此外,在某些情况下,别名可以提高可读性,例如

list.select(...).reject(...)

“听起来”比

更好
list.filter(...).reject(...)

答案 1 :(得分:0)

如果您查看他们的文档,您会发现它非常靠近lodash库(http://lodash.com/)和jQuery's库,以及Backbone和{{1 (在主页中找到)。

我的猜测是,他们两个都是做同样的事情,一个在Server(Lodash),另一个在Client(Underscore),并且使用相同的语法,他们有一些方法别名。

此外,添加一些别名永远不会好,因为它可以减少使用多种语言编写时的错误。

相关问题