2012-07-03 68 views
10

我最近發現,在Ruby中動態創建對象和方法是相當有用的,這可能是因爲我在Javascript中的背景經驗。如何在Javascript中動態創建對象及其方法?

在Javascript中你可以動態創建對象和它的方法如下:

function somewhere_inside_my_code() { 
    foo = {}; 
    foo.bar = function() { /** do something **/ }; 
}; 

如何(在JavaScript一樣簡單)實現在紅寶石上述表述的相同呢?

+1

當你編程Ruby時,你可能不應該嘗試移植你的JS方法。語言具有完全不同的對象模型,將會出現模式不匹配的情況。 –

+0

這是正確的,謝謝提醒。我只需要在我的應用程序中使用一個簡單的對象,這個對象只能在一個單獨的動作中使用,也許主要的原因是我不想以程序化的方式來完成它,它很笨拙。 :D –

+0

然後你應該看看[OpenStruct](http://ruby-doc.org/stdlib-1.9.3/libdoc/ostruct/rdoc/OpenStruct.html)。 –

回答

10

你可以用單方法實現這一目標。請注意,您可以與所有對象做到這一點,例如:

str = "I like cookies!" 

def str.piratize 
    self + " Arrrr!" 
end 

puts str.piratize 

將輸出:

I like cookies! Arrrr! 

這些方法真的只有這一個對象(因此而得名)上定義的,所以這段代碼(上面的代碼後執行):

str2 = "Cookies are great!" 
puts str2.piratize 

只是拋出異常:

undefined method `piratize' for "Cookies are great!":String (NoMethodError) 
+0

很好的答案。我以前見過它,但不知何故,它甚至不會跨越我的想法,哈哈哈。謝謝。 :) –

4

你可以做這樣的事情:

foo = Object.new 

def foo.bar 
    1+1 
end