TOPシステム開発> はじめに
まるごとJavaScript&Ajax!
JavaScriptを洗練させるPrototype.js

第2回:JavaScriptの復習
著者:ガイアックス  天野 仁史   2007/2/26
1   2  次のページ
JavaScriptについて再認識

   前回はJavaScriptの「プロパティ」「空のオブジェクト」「オブジェクト」について復習しました。引き続き「関数オブジェクト」「クラス」「空のクラス」「コンストラクタ」「プロトタイプ」について解説していきます。

関数オブジェクト

   JavaScriptでは関数も関数オブジェクトというオブジェクトです。関数オブジェクト自体をプロパティに代入することも可能ですし、関数オブジェクト自体がプロパティを持つことも可能です。

   実際に、リスト3のsayMyNameに格納されているものが、関数オブジェクトです。このように、オブジェクトのプロパティに格納された関数オブジェクトのことをメソッドと呼びます。

リスト3:プロパティを定義(再掲)
var amachang = {
   name: '天野',                   // nameプロパティ
   sayMyName: function() {         // sayMyNameプロパティ
      alert(this.name);
      }
};

alert(amachang.name); // 天野と表示
amachang.sayMyName(); // 天野と表示

   関数オブジェクト自体の概念はそこまで難しくないとは思いますが、関数オブジェクトはオブジェクト指向を成立させるための特殊な仕組みを持っています。それは、関数内部からアクセスできるthisという変数です。thisは関数オブジェクトを呼び出したときにその関数オブジェクトを格納していたオブジェクトを指しているのです。

   リスト5の例を見てください。

リスト5:オブジェクトによりthisが変わる
var amachang = {
   name: ' 天野'
};

var person = {
   name: ' 誰かさん'
};

amachang.sayMyName = function() { alert(this.name) };
amachang.sayMyName(); // 天野と表示---------------------------(1)

person.sayMyName = amachang.sayMyName;
person.sayMyName(); // 誰かさんと表示-------------------------(2)

   amachangとpersonのsayMyNameメソッドは同じオブジェクトであるにもかかわらず、呼び出した結果が異なっていることが分かります。1と2ではメソッドを呼び出したオブジェクトが違うため、thisの値が変わったのです。

   また、メソッドではない関数オブジェクトが呼び出された場合、グローバルオブジェクトという特殊なオブジェクトがthisになります。


クラス

   前項でも述べたようにJavaScriptではクラスが無くてもオブジェクトを生成できます。では、JavaScriptにはクラスいう概念は存在しないのでしょうか。それは、YESともNOともいうことができます。たしかに、JavaScriptには他のオブジェクト指向言語のようなクラスはありません。しかし、意味的にクラスと呼ばれる"もの"はあります。

   ここでは、そのJavaScriptのクラスと呼ばれる"もの"について紹介します。


空のクラス

   まずは、一番シンプルな空っぽのクラスを定義してみましょう。リスト6の例を見てください。

リスト6:空のクラスを定義
var Klass = function() {};

   「え?」と思う方も多いのではないでしょうか。これはどう見てもただの関数オブジェクトです。そう、そのとおりです。JavaScriptでは、関数オブジェクトがクラスなのです。そして、関数オブジェクトに対してnew演算を行うと初期化されたオブジェクトが生成されるという仕組みになっているのです。

   JavaScriptでは言語構造的にクラスという特別なものを持っているわけではなく、関数オブジェクトにクラスという意味的な役割を持たせているということなのです。

1   2  次のページ

株式会社ガイアックス 天野 仁史
著者プロフィール
株式会社ガイアックス   天野 仁史
渋谷で働くWebプログラマ。出身は石川県金沢市。21歳でプログラミングに出会い、IT戦士になることを決意。それからというもの、寝ても覚めてもプログラムを書き続け今に至る。はてなでamachangというidでブログを書いてます。

IT戦記
http://d.hatena.ne.jp/amachang/


INDEX
第2回:JavaScriptの復習
JavaScriptについて再認識
  コンストラクタ