クラスとコンストラクタ

参考書を読み進めていくうちに頭が混乱してきたので、整理。以下、自分用メモ

オブジェクト

var obj = new man() ;

コンストラクタの定義

function man(name){
    this.name = name;
    this.say = function() { alert(this.name) ; } 
}
var man = function(name) {
    this.name = name;
    this.say = function() { alert(this.name) ; } 
}    

オブジェクトのメソッド定義

var obj = man() ;
obj.say = function() { alert ("hello") ; }

すべてのオブジェクトはconstructorプロパティを持つ。そのconstructorプロパティはprototypeオブジェクトのプロパティ値でもある。

var hoge = Array() ;
alert(hoge.constoructor) ;  // function() {nativeなんちゃら}と表示

すべてのオブジェクトで共通のものは、prototypeで定義、インスタンス事に違うものを定義する場合は、コンストラクタで定義する。

以下もメモ

この場合はインスタンスプロパティ

var hoge = new Object() {} ;
hoge.a ;

この場合はクラスプロパティ

function hoge() {
}
hoge.prop = 1 ;

この場合はインスタンスメソッド

var hoge = function() {
    name : "jigen" ;
}
hoge.prototype.say = function { alert( this.name ) ; } ;
var obj = new hoge() ;
obj.say() ;

この場合はクラスメソッド

function hoge() {
     say : function() { alert("say"); }
}
hoge.say() ;

インスタンスメソッドとクラスメソッドの違いは、インスタンスを介して呼ばれるか、否か。
インスタンスメソッドの例の場合は、コンストラクタを定義した後に、いちどインスタンスを作成しているが、クラスメソッドの場合は、インスタンスを生成せずに、そのまま関数を呼べている。