ここは、ふぇりあ16歳が不定期に連載しているオンライン小説のページです。

VNIふぇりあ16歳へ


ゼロからわかる現代JavaScript

53.パターン「オブジェクトを生成するメソッドを持つクラス」

オブジェクト指向はいろいろな使い方をする事ができます。

そのうちの一つに

オブジェクトを生成するメソッドを持つクラス

があります。この使い方はとてもよく使われます。

作り方は簡単で

とあるクラスが他のクラスのオブジェクトを作って返してあげるだけです

obj.CrateObject = function () {
  return new class();
}

等とします。

そうすることで、とあるクラスと他のクラスは関連があって一緒に使うものだということが分かってくる
というわけです。

今回使用するソースコード
//普通にAクラスのオブジェクトを生成
var mc = new classA();
//他のクラスのオブジェクトをAクラスで生成する
var mc2 = mc.Cratejudgment();
var mc3 = mc.Crateobserver();

mc.joinjudgment();
mc2.joinjudgment();
mc3.joinjudgment();

//FクラスのオブジェクトをAクラスに送っている
mc.unit(mc3);

var skillout = "スキルアウト";

//グローバール変数
mc3.attack(skillout);

//オブジェクトを作るクラス
function classA() {
  var obj = this;
  obj.student = "御坂美琴";
  obj.student2 = "白井黒子";

  //Bクラスのオブジェクトを返す
  obj.Cratejudgment = function () {
    return new classB();
  }
  //Fクラスのオブジェクトを返す
  obj.Crateobserver = function () {
    return new classF();
  }

  obj.joinjudgment = function () {
    document.write(obj.student + "と" + obj.student2 + "は" + "ジャッジメントに参加しています<br>");
  }

  obj.unit = function(x){
    document.write(x.student + "は" + obj.student + "と" + "共闘します<br>");
  }
}

function classB() {
  var obj = this;
  obj.student = "初春飾利";

  obj.joinjudgment = function () {
    document.write(obj.student +"は" + "ジャッジメントに参加しています<br>");
  }
}

function classF() {
  var obj = this;
  obj.student = "上条当麻";

  obj.joinjudgment = function () {
    document.write(obj.student + "は" + "ジャッジメントに参加しています<br>");
  }
  obj.attack = function(x){
    document.write(obj.student + "は" + x + "を素手で殴る!");
  }
}

この例は、クラス内のクラス変数(生徒)に、
メソッド(風紀委員の活動)を通してアクセスしています。

通常は互いにアクセスできないのは、現実のクラス(教室)
と同じというわけです。

また、他のクラスのオブジェクトを自クラスに送ることで
一時的に、Aクラスで使うこともできます。

この場合、スコープがA+Fクラスに広がったと考え差し支えないでしょう。

実行結果

コラム:

このパターンは
おそらくGofのFactoryパターンと呼ばれるものです。
興味がある人はぜひ勉強しみてください。

(C)著作権はふぇりあ16歳とお兄ちゃんにあります。
無断転載、盗用は禁止です。