javascript prototype
jsにはクラスが無く、プロトタイプを使って
オブジェクト指向のような実装を行う。なお、
ECMAScript6ではクラスの概念が用意されている。
// コンストラクタ var Beef = function(name, type) { this.name = name; this.type = type; }; // prototypeプロパティメソッド // Beef.prototype.getName = function() { // return this.name; // }; // Beef.prototype.getType = function() { // return this.type; // }; // prototypeプロパティメソッド // オブジェクトリテラル使用版 Beef.prototype = { getName : function() { return this.name; }, getType : function() { return this.type; } } var kobeBeef = new Beef('kobeBeef', 'momo'); var oumiBeef = new Beef('oumiBeef', 'harami'); console.log(kobeBeef.getName() + ':' + kobeBeef.getType()); console.log(oumiBeef.getName() + ':' + oumiBeef.getType());
コンストラクタ内にメソッドを定義せず、
プロパティを使ってメソッドを定義する理由は、
メモリ使用量の削減のため。
インスタンス化したオブジェクトは、
コンストラクタで定義されているメンバ分の
メモリ領域を都度確保してしまう。
メソッドはインスタンスを通して全て
同じ振舞いをするため、個別にメモリを
確保するのは無駄になる。
prototypeプロパティでメソッドを管理することで、
同一メモリへの参照が可能になる。
メソッドは必ずprototypeプロパティで管理すること。