2015-08-17 30 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