2015-08-17 100 views
2

我对JavaScript相当陌生,但对Ruby来说不太新。我喜欢的是能够直接从列表中调用模块功能Ruby的风格,即我可以将所有下划线对象绑定到原生JavaScript原型吗?

[1,2,3].each { |e| puts e } 

这会觉得很直观的给我,如果我能在Javascript中做到这一点通过执行类似_.bind(_.each, Array.prototype, this),然后调用它像这样:

[1,2,3].each(function(e) { console.log(e) }) 

但是,我知道试图假装一种语言是另一种语言是危险的。我想知道是否有办法使绑定工作,如果有任何理由,这将是一个非常糟糕的主意?是否有任何现有方法自动将所有主干函数应用于Object,Array和Collection原型?

感谢提前:)

编辑:要清楚,我意识到,“每个”功能在本地JavaScript存在,我使用了在这里的例子。我的问题是如何安全地将_函数注入本地JS原型,而不仅仅是_.each函数。

+0

http://www.ruzee.com/blog/2008/12/rubys-each-for-javascript/ – jazzytomato

回答

2

除非你靶向IE8及以下(你应该需要一个很好的理由这样做),那么你可以做

[1,2,3].forEach(function(e) { console.log(e) }) 

Array.prototype.forEach

如果由于某种原因,你需要支持IE8(你应该需要一个很好的理由)然后坚持使用下划线_.each方法并直接使用它。骨干首先对下划线有很强的依赖性,所以如果你使用Backbone,你会得到下划线。

您也可以只填充它,请参阅mdn polyfill

+0

要添加一些上下文,我目前正在使用的应用每天有大约1000次独特点击, Google Analytics(分析)表示在过去一个月中,我们有8次来自IE8的独特点击率。现在是2015年,我们不再需要下划线来使用基本的ES5功能。 – ivarni

+0

感谢您的回复,我的问题是专门将下划线函数合并到内置的JS对象中。这可能与_.each有关,但这仅仅是一个例子。 – pixelpax

+0

@ user2130130啊对。因为大多数下划线函数将上下文作为第一个参数(例如'_.where(list,properties)'),所以如果要将它绑定到Array原型,我不会看到一种简单的方法来处理一般情况你必须用'this'作为'list'的参数来粘贴,但是你不能,因为还没有实例。据我所见,没有办法做到这一点,但你也许可以去完整的企业,并创建一个'ArrayFactory'来为你创建所有的数组,并执行'myArr.each = _.bind(_。each,myArr, myArr)'为每个你想添加的方法。 – ivarni