JavaScriptにおける“クラス”の定義

http://www.atmarkit.co.jp/fdotnet/ajaxjs/ajaxjs04/ajaxjs04_01.html


C++の気持ちでいると混乱する。

「JavaScriptでは関数オブジェクトにクラスとしての役割を与えて使うもの」と考えるべし。


そして「プロトタイプ」という考え方も重要。


クラスに関数(メソッド)を追加とするにはコンストラクタで定義する必要がある

var Animal = function(name, sex) {
  this.name = name;
  this.sex = sex;
  this.toString = function() {
    window.alert(this.name + " " + this.sex);
  };
}
var anim = new Animal("トクジロウ", "オス");
anim.toString(); // 「トクジロウ オス」

が、ここに書くと大量にnewする場合、まったく同じ処理をするメソッドがメモリ上にnewした数だけ存在してしまう

prototype経由にすると、それが回避できる。

var Animal = function(name, sex) {
  this.name = name;
  this.sex = sex;
}

Animal.prototype.toString = function() {
  window.alert(this.name + " " + this.sex);
};

var anim = new Animal("トクジロウ", "オス");
anim.toString(); // 「トクジロウ オス」

詳しい仕組みはネタ元参照。

しっかり読み込んで理解しないと、やられます。


ネタ元