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

VNIふぇりあ16歳へ


ゼロからわかる現代JavaScript

57.パターン「オブジェクトをもつデータークラス」

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

前回のクラスに、さらにオブジェクトを変数としてもたせたもの。

こうすることでデーターの扱いがより便利になります。

今回使用するソースコード
//必要な分だけ生徒のオブジェクトを作る
var student1 = new student();

//情報を入力 プロパティに変更
student1.setName("御坂美琴");
student1.setSlill("エレクトロマスター");
student1.setLevel("LEVEL5");
student1.setHobby("ゲコ太集め");
student1.setSchool("常盤台中学校");

var student2 = new student();

//情報を入力 プロパティに変更
student2.setName("白井黒子");
student2.setSlill("テレポーター");
student2.setLevel("LEVEL5");
student2.setHobby("?");
student2.setSchool("常盤台中学校");

var item1 = new item();
item1.setName("ゲーセンのコイン");
item1.setPrice("100円");

var item2 = new item();
item2.setName("金属矢");
item2.setPrice("?円");

document.write("生徒のデーター表示<hr>");

student1.setItem(item1);
student2.setItem(item2);

//デーを表示 クラスメソッドに変更
student1.showdata(student1);
student1.showdata(student2);

//構造体のようなクラス
function student() {
  var obj = this;
  //クラス変数
  obj.name = null;
  obj.skill = null;
  obj.level = null;
  obj.hobby = null;
  obj.school = null;
  //クラス変数にオブジェクト(クラス)を保持する
  obj.item = null;

  //get/setプロパティ
  obj.getName = function () {
    return obj.name;
  }
  obj.setName = function (x) {
    obj.name = x;
  }
  //get/setプロパティ
  obj.getSkill = function () {
    return obj.skill;
  }
  obj.setSlill = function (x) {
    obj.skill = x;
  }
  //get/setプロパティ
  obj.getLevel = function () {
    return obj.level;
  }
  obj.setLevel = function (x) {
    obj.level = x;
  }
  //get/setプロパティ
  obj.getHobby = function () {
    return obj.hobby;
  }
  obj.setHobby = function (x) {
    obj.hobby = x;
  }
  //get/setプロパティ
  obj.getSchool = function () {
    return obj.school;
  }
  obj.setSchool = function (x) {
    obj.school = x;
  }
  //get/setプロパティ
  obj.getItem = function () {
    return obj.item;
  }
  obj.setItem = function (x) {
    obj.item = x;
  }

  //データー表示用メソッド
  obj.showdata = function (x) {
    document.write(x.name + ":" +
             x.skill +
             x.level + "/趣味:" +
             x.hobby + "所属:" +
             x.school + "<br>" + "アイテム:" +

             //ネストしてアクセス
             //(オブジェクトからオブジェクトを呼ぶ→データ取得)
             x.getItem().getName() +
             x.getItem().getPrice() + "<br>");
 }
}

function item() {
  var obj = this;
  obj.name = null;
  obj.price = null;

  //get/setプロパティ
  obj.getName = function () {
    return obj.name;
  }
  obj.setName = function (x) {
    obj.name = x;
  }
  //get/setプロパティ
  obj.getPrice = function () {
    return obj.price;
  }
  obj.setPrice = function (x) {
    obj.price = x;
  }
}

それだけでなく、itemオブジェクトを呼び出したときに

オブジェクト.メソッド().メソッド()

としてネストして呼んでいる点に注目です。

実行結果

コラム:

つまり「生徒」のデータのクラスが、「持ち物」のクラス(構造体ふうの)を
もっていることになります。

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