JavaScriptのオブジェクト指向:コンストラクタに関するありがちな誤解

白石俊平
2008/03/04 18:30

いよいよJavaScriptのオブジェクト指向機能についてです。筆者が抱いていたありがちな誤解を紹介しながら、そのさわりをお話ししましょう。

 もちろん、可能です。コンストラクタ内で「this」演算子を用いることで、オブジェクトにメンバを追加することができます。下のコードは、Personのオブジェクトに以下のメンバを追加したものです。

name
自分の名前を表す属性。コンストラクタの引数で受け取るようにする
hello()
nameの値を含むメッセージをアラートで表示する
  function Person(name) {
    // this演算子を用いて、メンバを追加
    this.name = name;
    this.hello = function() {
    // this演算子を用いてメンバを参照
      alert("こんにちは。私の名前は" + this.name + "です。");
    };
  }
  // newしてメソッドを使用
  var shiraishi = new Person("白石");
  shiraishi.hello();

 「this」キーワードは、実行中のコードが「自分自身」を表すオブジェクトにアクセスするためのキーワードです。「this.name = name;」や「this.hello = function()...」のようにすることで、自分自身に「name」と言う属性や「hello()」と言うメソッドを追加しています。

 こうしてみると、「Person」は、Javaで言うところのクラスにだいぶ近づいてきましたね。そこで、本来JavaScriptには「クラス」と言う概念がないのですが、こうしたコンストラクタのことを「Personクラス」と呼ぶこともよくあります。

まとめと次回予告

 今回は、オブジェクト指向言語としてのJavaScriptについて、ほんのさわりだけを説明しました。今回説明した方法は、フィールドやメソッドを持つJavaScriptオブジェクトを作成するためのもっとも基本的な方法です。

 しかし、今回説明した方法でクラスにメンバを追加するのは、パフォーマンスなどの観点から見ると、実はあまり優れたものだとは言えません。次回はその欠点について説明した後、その欠点を改善するための「プロトタイプ」と言う仕組みについてお話しします。プロトタイプは、「継承」などの機能を実現する上でも非常に重要ですので、しっかり解説していきたいと思います。

記事の感想やご意見をコメントでお寄せください(CNET_IDログインが必要です)
ログイン パスワードを忘れた方  |  新規登録
  • 新着記事
  • 人気記事
  • 特集
  • ブログ
  • 読者投票
    今、使っているマシンのOSは?

    投票受付期間:2008年6月27日 〜 2008年7月11日
  • » 投票しないで結果だけ見る