クラスの作り方4パターン
コンストラクタ方式
コンストラクタ方式 function クラス(){ this.変数1 = 1; this.関数1 = function(){ alert("関数1です") }; } var インスタンス = new クラス(); インスタンス.変数1; //1 インスタンス.関数1(); //関数1です
インスタンス毎に変数と関数が作られる。
クラス内に全て記述するので分かりやすいのが利点、関数をインスタンス毎に作るのが無駄なのが難点
プロトタイプ方式
プロトタイプ方式 function クラス(){ } クラス.prototype.変数1 = 1; クラス.prototype.関数1 = function(){ alert("関数1です") }; var インスタンス = new クラス(); インスタンス.変数1; //1 インスタンス.関数1(); //関数1です
インスタンス間で変数と関数が共有される。
メモリ消費量が少ないのが利点、変数の値にthisや引数を使用できないのが難点
ハイブリッド方式
ハイブリッド方式 function クラス(){ this.変数1 = 1; } クラス.prototype.関数1 = function(){ alert("関数1です") }; var インスタンス = new クラス(); インスタンス.変数1; //1 インスタンス.関数1(); //関数1です
変数はインスタンス毎に作られ、関数はインスタンス間で共有される。
コンストラクタ方式とプロトタイプ方式の難点を克服するも、変数と関数を分離して記述するため分かりにくいのが難点
ES2015方式
ES2015方式 class クラス{ constructor(){ this.変数1 = 1; } 関数1(){ alert("関数1です"); } } var インスタンス = new クラス(); インスタンス.変数1; //1 インスタンス.関数1(); //関数1です
変数はインスタンス毎に作られ、関数はインスタンス間で共有される。(ハイブリッド方式と同等)
ハイブリッド方式の難点を克服したクラス記述の完成系