Underscore.js定义_.each (alias: forEach)
和_.map (alias: collect)
等函数的别名,我不明白为什么。
我最初认为这是为了避免浏览器本身没有实现这些功能的问题,我的想法是调用[].map()
会在IE7和8中引发错误,因为他们没有在本地实现它但是找到了没有问题,因为Underscore已经定义了这些。
然后我认为它可能与其他JS库(如Prototype)的冲突有关,这些库实现了类似命名的函数但后来意识到,在_.map
的情况下,拥有别名实际上并没有产生影响实现.map
和.colelct
实际上我一直在使用原型的实现(例如。this.collection.collect(...)
)。
到目前为止它似乎没有任何区别,它没有产生任何问题,但我真的想知道为什么会发生这种情况。
答案 0 :(得分:5)
我想别名的目的是让库更熟悉具有不同背景的程序员(例如,在Ruby中使用collect
和include
,在函数式语言中使用fold
等)
此外,在某些情况下,别名可以提高可读性,例如
list.select(...).reject(...)
“听起来”比
更好list.filter(...).reject(...)
答案 1 :(得分:0)
如果您查看他们的文档,您会发现它非常靠近lodash
库(http://lodash.com/)和jQuery's
库,以及Backbone
和{{1 (在主页中找到)。
我的猜测是,他们两个都是做同样的事情,一个在Server(Lodash),另一个在Client(Underscore),并且使用相同的语法,他们有一些方法别名。
此外,添加一些别名永远不会好,因为它可以减少使用多种语言编写时的错误。