Underscore.js定义了像_.each (alias: forEach)
和的函数的别名_.map (alias: collect)
,我不明白为什么.
我最初认为这是为了避免浏览器本身没有实现这些功能的问题,我的想法是调用[].map()
会在IE7和8中引发错误,因为他们没有在本地实现它但发现自从Underscore以来没有问题定义那些.
然后我认为它可能与其他JS库(例如Prototype)的冲突有关,这些库实现了类似命名的函数但后来意识到,在_.map
自原型实现的情况下,拥有别名实际上并没有区别.map
,.colelct
而且实际上我已经一直使用原型的实现(例如this.collection.collect(...)
).
到目前为止它似乎没有任何区别,它没有产生任何问题,但我真的想知道为什么会发生这种情况.
我想别名的目的是为了使库具有不同背景的程序员更熟悉(例如,collect
和include
在Ruby中使用,fold
在功能性语言等).
此外,例如,别名可以在某些情况下提高可读性
list.select(...).reject(...)
"听起来"好于
list.filter(...).reject(...)