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

VNIふぇりあ16歳へ


ゼロからわかる現代JavaScript

10.クラス化で独自のオブジェクトを作ろう

オブジェクト指向というのは非常にわかりません。
簡単には分からない事だとまず思うことが大事です。

長期的に勉強を続けるいつか霧が晴れるように分かれるものです

クラス化は

例として

function AoiTori() {



と通常のメソッドを作るだけでも空のクラスになっています。

この通常のメソッドの部分(コンストラクタ)に関して
オブジェクトを生成した時に行いたい処理を書きます

次に、

クラスには変数を定義することができます。

function AoiTori() {
  this.name = "葵・トーリ";


クラス変数(メンバ変数)は一時的に値を保持します。

(実行時の制御が当該クラスから外れても、
その変数が含まれているオブジェクトと共にメモリ上に保持されつづけます。)

キーワード thisを使い、クラスに変数を追加します。
(このthisはAoiToriクラス(オブジェクト)のことを示しています)



さらにname変数を、読み出し/書き込みするメソッドを
追加すると「プロパティ」として使いやすくなります。

(つまり、プロパティとは単なる読み出し・書き込みメソッドなのです)

これは簡単ですね。独力で実装してみてください。

さらに、メソッドを追加します。

再度、キーワード this を使い、クラスにメソッドを追加します。

function AoiTori() {
  this.name = "葵・トーリ";

  this.skill = function(){
    document.write("メソッド");
  }


どうでしょう?クラス内のメソッドとは、メソッドの中にメソッドがあるイメージです。

そうすることで、オブジェクトを生成したとき

var aoi = new AoiTori();

aoi.skill();

のようにメソッドやプロパティを使うことができるようになります。

今回使用するソースコード
//オブジェクトを生成します。
var aoi = new AoiTori();

//ニックネームを設定します
aoi.setNickName("不可能男【インポッシブル】");

document.write(aoi.getName() + "(別名:" + aoi.getNickName() + ")のスキル:<br>" + aoi.skill() + "<br>");
document.write(aoi.getNickName() + "と呼ばれても" + aoi.getName() + "は人気者だよ?");

//クラス定義は従来のメソッドと同じです。
function AoiTori() {
  //AoiToriオブジェクトを変数に渡しています。
  var obj = this;
  //クラス変数
  obj.name = "葵・トーリ";
  obj.hobby = "美少女ゲーム";
  obj.nickname;

  //get(読み出し)のみのプロパティ
  obj.getName = function () {
  return obj.name;
  }

  //get/setのセットのプロパティ
  //読み出し
  obj.getNickName = function () {
  return obj.nickname;
  }

  //書き込み
  obj.setNickName = function (x) {
  obj.nickname = x;
  }

  //メソッド
  obj.skill = function () {
  return ("術式不明。自分の物を、他者に分け与えれるが、これ以上泣いたら死ぬ");
  }
}

実行結果


さて、古典プログラミング(C言語)などをしているとオブジェクト指向になった
現代プログラミングにかなりつまずくと思います
これだけ複雑なものが分からないのは当然です。


クラスのイメージのとして、学校の文字通りクラス分けをイメージすると分かりやすいです。
グローバル変数やメソッドが、クラス分けされ、それぞれクラス内の変数、メソッドになった
と思うとだいぶすっきりします。

しかしそれだけではないので要注意です。

JavaScriptではグローバル変数も使うことができますが、
オブジェクト指向としては使用しないことが前提であることを覚えておいてください。


コラム:

アクセス制御子に関して
JavaScriptには定義されていません。

それは共同作業におけるアクセス制御のために使うため
はっきりいって一人で書いてる間はどうでもいいものですから
定義されていないのでしょう。

他の言語で、そこでつまづくことも多いでしょう

他の言語では、本来は他のプログラマーに渡す時に使うものです。
個人で使っている分には全部publicでも問題ないぐらいです。

書き終わった後に、どのメソッドを公開するのかを決めましょう。

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