メソッド定義 ~ JavaScript によるオブジェクト指向プログラミング
少し詳しく、新しい情報を混えて、次のページに書き直しました。 「プロトタイプとプロトタイプチェーン」
前回作成した Person クラスに メソッドを追加します。
実は JavaScript では、どんなオブジェクトでも、オブジェクトが作られた時に、 プロトタイプオブジェクトというのが自動的に作られ、 そのオブジェクトが prototype プロパティに設定されます。
プロトタイプ・オブジェクトにメソッドを追加すれば、 そのオブジェクトのメソッドとして呼び出せます。
ではさっそく具体例です。
var Person = function (n) { this.name = n; } Person.prototype.say_hello = function() { alert( 'Hello! My name is ' + this.name + '.' ); } var p = new Person('Ichiro'); p.say_hello();
それぞれ見て行きましょう。
var Person = function (n) { this.name = n; }
このコードで Person という function オブジェクトを作成します。 function オブジェクトの name プロパティにパラメータ n を設定します。 これは前回説明したとおりです。
Person.prototype.say_hello = function() { alert( 'Hello! My name is ' + this.name + '.' ); }
このコードで Person のプロトタイプオブジェクトの say_hello という属性に、 function オブジェクトを設定します。同じ function オブジェクト (つまり Person) の中ですから、コンストラクタで設定した this.name にアクセス可能です。
var p = new Person('Ichiro'); p.say_hello();
ここで Person function オブジェクトを、new 接頭辞付きで実行します。 パラメータには 'Ichiro' という文字列を渡しています。
new 付きで呼び出していますから、これは前回説明したとおり、 新しいオブジェクトを作成し、その新しいオブジェクトに元の function オブジェクト (=つまり Person) のプロトタイプオブジェクトとのリンクが作成されています。
従って、p の say_hello() を呼び出すと、正しく実行されます。