HTML5テクニカルノート Function.prototypeプロパティ
説明コンストラクタとして呼出された関数は、プロトタイプオブジェクトをひとつもちます。そして、コンストラクタからつくられたインスタンスは、そのプロトタイプオブジェクトを参照し、プロトタイプオブジェクトに加えられたプロパティやメソッドを自らに定められたものと同じように使えます。 例つぎに定めるクラス(Vector2D)は、Function.prototypeプロパティを用いず、コンストラクタ関数(Vector2D())の中でthisキーワードにより参照したインスタンスに直にメソッド(getLength())を加えています。コンストラクタ関数には引数として(x, y)座標を与え、メソッドは原点(0, 0)からその座標までの距離を返します。
前掲のクラス(Vector2D)からつぎのJavaScriptコードのように座標(1, √3)のインスタンスをつくって、メソッド(getLength())を呼出すと、警告ダイアログボックスに原点から座標までの距離が示されます(図001)。メソッドはインスタンスごとに加えられるので、複数のインスタンスをつくればその数だけメソッドに定める関数もつくられることになります。
図001■警告ダイアログボックスに原点から座標までの距離が示される つぎのクラス(Vector2D)は、コンストラクタ関数(Vector2D())のFunction.prototypeプロパティを参照して、プロトタイプオブジェクトにメソッド(getLength())を定めました。すると、このコンストラクタからつくられるインスタンスはすべて同じプロトタイプオブジェクトを参照して、そこに定められたメソッドが呼出されます。 前のクラスの定義とメソッドそのものの動きは変わりません。けれど、インスタンスがいくつつくられても、メソッドとして呼出されるのはプロトタイプオブジェクトに定められたひとつの関数になります。
プロトタイプオブジェクトにはプロパティも加えられます。すると、インスタンス自身にまだそのプロパティがないときに、プロトタイプオブジェクトから値が参照されます。つぎのクラス(Vector2D)は、コンストラクタ関数(Vector2D())のFunction.prototypeプロパティに、ふたつのプロパティ(xとy)とその値を定めました。
つぎのJavaScriptコードは、初めに引数でプロパティ値(10, 20)を与えてインスタンスをつくってから、インスタンスのひとつのプロパティ(x)をdelete演算子で削除しています。すると、インスタンスから除かれたプロパティ(x)の値は、プロトタイプオブジェクトから参照されます(図002)。
図002■警告ダイアログボックス示されたふたつのプロパティ値 参考MDN「Function.prototype」 作成者: 野中文雄 Copyright © 2001-2012 Fumio Nonaka. All rights reserved. |
||||||||||||||