オブジェクト指向
javaScriptはオブジェクト指向言語です。けれども、Javaなどと大きく異る点があります。それはインスタンス化の概念はありますが、クラスがありません。そしてクラスの代わりにプロトタイプという概念があります。Javaなどでオブジェクト指向を学習した者にとっては何だか解りづらいものです。これから数回に分けてプロトタイプベースのオブジェクト指向についてみていきます。
オブジェクトの生成~Object()コンストラクタを使用
オブジェクトを作成してプロパティを持たせる
「オブジェクトとは、名前と値を持つプロパティを格納するコンテナにすぎない」(開眼!JavaScriptより)
この一文がオブジェクトを見事に言い表していますね。オブジェクトとは名前のついた値(プロパティ)の集合体を格納しています。
早速オブジェクトの生成について試してみましょう。
dogroboというオブジェクトを作成して色、幅、高さのプロパティを持たせます。
dogrobo = new Object(); dogrobo.color = 'blue'; dogrobo.weight = 350; dogrobo.height = 300; window.document.writeln('ドッグロボの色は' + dogrobo.color + 'です。');
dogrobo = new Object();
これはObject()コンストラクタをnew演算子を使用してdogrobo という空のオブジェクトを作成したことになります。
dogrobo.color = ‘blue’;以降はdogroboオブジェクトにドット演算子でプロパティの設定を行っています。色と幅と高さ、3つのプロパティを追加しました。
これで3つのプロパティ(名前の付いた値)を持つオブジェクトdogroboの完成です。
オブジェクトにメソッドを追加する
ここまではdogroboオブジェクトにプロパティを加えていきましたが、今度はこのdogroboオブジェクトに生命を与えてみましょう。
dogrobo.getName = function(n){ return '私の名前は' + n + 'です。' }
スクリプト実行結果
オブジェクトにはメソッドを追加することができます。メソッドを追加することでより多くの仕組みを与えることができるのです。
コンストラクタの定義
JavaScriptには正式なクラスはありませんが、コンストラクタ関数は存在します。
コンストラクタ関数はnew演算子を使って、ある程度共通の性質やふるまいを持ったオブジェクトを複数作成することができます。そしてこのオブジェクトのことをインスタンスといいます。
以下簡単なコンストラクタの定義とnew演算子でインスタンス化を行なってみます。コンストラクタには2つのプロパティと1つのメソッドを定義しています。
/*クラスの定義*/ var Animal = function(na,iro){ this.name = na; this.color = iro; this.getName = function(){ return '名前は' + this.name + 'です。'}; }; /*インスタンス化*/ var dog = new Animal('太郎','赤'); /*書き出し*/ document.writeln(dog.getName()); document.writeln('色は' + dog.color + 'です。');
スクリプトの実行結果です。
コンストラクタ関数を使用したオブジェクト(インスタンス)作成はオブジェクトファクトリーとして簡単に多くのオブジェクトを作成することができるのです。