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

白石俊平(あゆた)
2008-03-04 18:30:00
  • このエントリーをはてなブックマークに追加

 もちろん、可能です。コンストラクタ内で「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オブジェクトを作成するためのもっとも基本的な方法です。

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

このサイトでは、利用状況の把握や広告配信などのために、Cookieなどを使用してアクセスデータを取得・利用しています。 これ以降ページを遷移した場合、Cookieなどの設定や使用に同意したことになります。
Cookieなどの設定や使用の詳細、オプトアウトについては詳細をご覧ください。
[ 閉じる ]