Ruby开放类和JavaScript原型对象之间的区别是什么?

Ruby开放类和JavaScript原型对象之间的区别是什么?,javascript,ruby,Javascript,Ruby,在Ruby中,您可以使用openclass添加如下属性: class String attr_accessor :ruby def open ruby = 'open' end def close ruby = 'close' end end String.prototype.ruby = {} String.prototype.open = function () { this.ruby = "open"; } String.protot

在Ruby中,您可以使用openclass添加如下属性:

class String
   attr_accessor :ruby
   def open
      ruby = 'open'
   end
   def close
      ruby = 'close'
   end
end
String.prototype.ruby = {}
String.prototype.open = function () { this.ruby = "open"; }
String.prototype.close = function () { this.ruby = "close"; }
var x = new String()
console.log(['ruby', x.ruby].join(':'))
/* when invoke open */
x.open()
console.log(['ruby', x.ruby].join(':'))
/* when invoke close */
x.close()
console.log(['ruby', x.ruby].join(':'))
然后你可以用

x = String.new
x.open # it will set ruby to 'open'
'open'
x.close # it will set ruby to 'close'
'close'
在JavaScript中,您可以使用prototype添加如下属性:

class String
   attr_accessor :ruby
   def open
      ruby = 'open'
   end
   def close
      ruby = 'close'
   end
end
String.prototype.ruby = {}
String.prototype.open = function () { this.ruby = "open"; }
String.prototype.close = function () { this.ruby = "close"; }
var x = new String()
console.log(['ruby', x.ruby].join(':'))
/* when invoke open */
x.open()
console.log(['ruby', x.ruby].join(':'))
/* when invoke close */
x.close()
console.log(['ruby', x.ruby].join(':'))
然后您可以像这样调用这些原型方法:

class String
   attr_accessor :ruby
   def open
      ruby = 'open'
   end
   def close
      ruby = 'close'
   end
end
String.prototype.ruby = {}
String.prototype.open = function () { this.ruby = "open"; }
String.prototype.close = function () { this.ruby = "close"; }
var x = new String()
console.log(['ruby', x.ruby].join(':'))
/* when invoke open */
x.open()
console.log(['ruby', x.ruby].join(':'))
/* when invoke close */
x.close()
console.log(['ruby', x.ruby].join(':'))

它们是同一件事吗?

在Ruby中,您的方法
open
close
没有按照您可能想要的方式工作。@sawa哪种情况不起作用?