javascriptのprototypeオブジェクトの利点

javascriptのprototypeオブジェクトについてです。

今まで適当にやっていたのですが、少しまとめたいと思います。

  1. メモリの使用量を削減できる
  2. メンバーの追加や変更をインスタンスがリアルタイムに認識できる

メモリの使用量を削減できる

こちらはどういうことかを説明します。

javascriptコンストラクターによるメソッドの追加は、メソッドの数に比例して、無駄なメモリを消費するという問題があります。

var Member = function(firstName, lastName) {
  this.firstName = firstName;
  this.lastName = lastName;
  this.getName = function() {
    return this.firstName + '' + this.lastName;
  }
}

mem = new Member("foo", "bar");
mem_2 = new Member("foo", "baz");

これが永遠と作成されてしまうと、その度にメモリが消費していきます。

そこでprototypeを使用します。

prototypeはインスタンス化した場合は、元となるオブジェクトに属するprototypeオブジェクトに対して暗黙的に参照を持つようになります。

var Member = function(firstName, lastName) {
  this.firstName = firstName;
  this.lastName = lastName;
}

Member.prototype.getName = function() {
  return this.firstName + '' + this.lastName;
}

mem = new Member("foo", "bar");
mem_2 = new Member("foo", "baz");

mem.getName()
=>"foobar"

参照でメソッドを実行しているので、無駄なメモリ確保がなくなります。

メンバーの追加や変更をインスタンスがリアルタイムに認識できる

var Member = function(firstName, lastName) {
  this.firstName = firstName;
  this.lastName = lastName;
}

mem = new Member("foo", "bar");
mem_2 = new Member("foo", "baz");

Member.prototype.getName = function() {
  return this.firstName + '' + this.lastName;
}

mem.getName()
=>"foobar"

このように後から追加することができます。

以上です。