2012-07-03 45 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