rubyとjavascriptのオブジェクト向けプログラミングの比較
5695 ワード
原文:
http://howtonode.org/object-graphs-3
著者らはrubyとjavascriptの両者のオブジェクト向けモードの違いを解析し,著者らは両者のオブジェクト向けモードの違いをグラフィックで表現し,見応えがある.ここでは重点部分だけを取って、興味のある読者は原文を見ることができます.
Ruby
簡単な文字列を見てみましょう.
対象図は次のとおりです.
参照
Notice that every object has a class. Our string is of class String which inherits from the class Object. It's class String is of class Class which inherits Module and then Object.
JavaScriptを見てみましょう
参照
Remember that you can simulate classes in JavaScript using constructor + prototype pairs. That's just what the built-in object types do. The prototypes are objects and thus inherit directly from Object.prototype and the constructors are functions and inherit from Function.prototype.
オブジェクトプライベートメソッドは、クラスではなくオブジェクトを指すことに注意してください.クラスのプライベートメソッドは、クラスの宣言でprivateで修飾されます.オブジェクトプライベートメソッドとは、1つのオブジェクトのメソッドが同類の他のオブジェクトに対してプライベートであることを意味します.次のコードがあります.
参照
Notice that it injected a new anonymous class directly in front of the object and put the new method there for you. This class is hidden though. If you call the animal.class() then you'll get a reference to String directly.
Javascriptを見てみましょう
実装方式はrubyと類似していることがわかる.
クラスの定義
Ruby
Javascript
クラスメソッド
ruby
参照
You see that it inserted a new anonymous class in the chain to store the create method
javascript
参照
Here we make the constructor inherit from it's parent constructor (so that "class methods"get inherited) and inherit the prototypes so that "instance methods"get inherited. Again there is no need for hidden classes since javascript allows storing function properties on any object.
http://howtonode.org/object-graphs-3
著者らはrubyとjavascriptの両者のオブジェクト向けモードの違いを解析し,著者らは両者のオブジェクト向けモードの違いをグラフィックで表現し,見応えがある.ここでは重点部分だけを取って、興味のある読者は原文を見ることができます.
Ruby
簡単な文字列を見てみましょう.
animal = "cat"
対象図は次のとおりです.
参照
Notice that every object has a class. Our string is of class String which inherits from the class Object. It's class String is of class Class which inherits Module and then Object.
JavaScriptを見てみましょう
var animal = "cat";
参照
Remember that you can simulate classes in JavaScript using constructor + prototype pairs. That's just what the built-in object types do. The prototypes are objects and thus inherit directly from Object.prototype and the constructors are functions and inherit from Function.prototype.
オブジェクトプライベートメソッドは、クラスではなくオブジェクトを指すことに注意してください.クラスのプライベートメソッドは、クラスの宣言でprivateで修飾されます.オブジェクトプライベートメソッドとは、1つのオブジェクトのメソッドが同類の他のオブジェクトに対してプライベートであることを意味します.次のコードがあります.
animal = "cat" #animal
def animal.speak # animal , , ,
puts "The #{self} says miaow"
end
animal.speak
puts animal.upcase
参照
Notice that it injected a new anonymous class directly in front of the object and put the new method there for you. This class is hidden though. If you call the animal.class() then you'll get a reference to String directly.
Javascriptを見てみましょう
var animal = /cat/;
animal.speak = function speak() {
console.log("The " + this + " says miaow");
};
animal.speak();
animal.test('caterpiller');
実装方式はrubyと類似していることがわかる.
クラスの定義
Ruby
class Dave
end
Javascript
function Dave() {}
クラスメソッド
ruby
# Make a parent class
class Person
# with an instance method
def greet
puts "Hello"
end
# and a class method.
def self.create
self.new
end
end
# Create a subclass
class Dave < Person
end
# and test it.
puts Dave.create
puts Dave.new
Dave.create.greet
参照
You see that it inserted a new anonymous class in the chain to store the create method
javascript
// Make a parent class
function Person() {}
// with an instance method
Person.prototype.greet = function greet() {
console.log("Hello");
}
// and a class method.
Person.create = function create() {
return new this();
};
// Create a subclass
function Dave() {}
Dave.__proto__ = Person;
Dave.prototype.__proto__ = Person.prototype;
// and test it.
console.log(Dave.create());
console.log(new Dave);
Dave.create().greet();
参照
Here we make the constructor inherit from it's parent constructor (so that "class methods"get inherited) and inherit the prototypes so that "instance methods"get inherited. Again there is no need for hidden classes since javascript allows storing function properties on any object.