日期:2014-05-16 浏览次数:20407 次
class MyClass def the_method "general method" end end
mc = MyClass.new
mc.the_method
正统的创建类和对象的语法,可以直接翻译成Java代码。但是Ruby的类不仅仅存在于静态的源文件中,他还存在于运行时。因为Ruby的一个类就是Class的一个对象,同时他还是Object的一个子类。好奇葩吧!看代码这儿不仅仅可以用创建对象的方法来生成类,还可以实现继承和定义类体。这儿还有更加令人惊讶的,由于类是Class的一个对象,因此类的方法就是Class的实例方法。而Class继承了Module,Module继承了Object,Object混入了Kernel模块(Object也是一个类,鸡生蛋还是蛋生鸡?)。因此他们的实例方法都是类的类方法(也叫单例方法),相当于Java的静态方法。C = Class.new D = Class.new(C) { include M def the_method "general method" end }
o = Object.new o.instance_variable_set(:@x, 0) # Note required @ prefix o.instance_variable_get(:@x) # => 0 o.instance_variable_defined?(:@x) # => true Object.class_variable_set(:@@x, 1) # Private in Ruby 1.8 Object.class_variable_get(:@@x) # Private in Ruby 1.8 Object.class_variable_defined?(:@@x) # => true; Ruby除去多余的语法,可以看到一个对象就像一个哈希表那样应付着外界的拷问。下面给这个哈希表添加一个属性。
class ClassMethodExample def self.foo puts 'class foo' end class << self def bar puts 'class bar' end end end class << ClassMethodExample def baz puts 'class baz' end end def ClassMethodExample.tor puts 'class tor' end ClassMethodExample.foo ClassMethodExample.bar ClassMethodExample.baz ClassMethodExample.tor
class Person def talk puts "This is a Person class." end end p1=Person.new p2=Person.new #定义单例方法,首先要生成一个实例对象,其次,要在方法名前加上对象名和一个点号“.” def p2.talk puts "This talk method belongs to p2." end def p2.laugh puts "laugh method belongs to p2." end p1.talk #This is a Person class. p2.talk #This talk method belongs to p2. p2.laugh #laugh method belongs to p2.这就让人不得不想到JavaScript的创建对象的语法
var person = new Object(); person.name = “Nicholas”; person.age = 29; person.job = “Software Engineer”; person.sayName = function(){ alert(this.name); };下面就来介绍一下JavaScript的对象模型