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プロパティで管理すること。