すべての関数オブジェクトもprototype
プロパティで作成されます。
var fn = function() { };
fn.hasOwnProperty("prototype"); // true
つまり、JavaScript のすべての関数には、prototype
他の JavaScript オブジェクトと同様に、それぞれにプロパティがあります。
その値は、値が関数であるコンストラクタ プロパティを持つオブジェクトです。
を指すオブジェクトは、元の関数を指すプロパティをprototype
持っています。constructor
fn.prototype.constructor === fn // true;
obj.prototype.constructor
つまり、 (上書きされていない限り)見ることで、構築されたオブジェクトからコンストラクター関数を派生させることができます。
これは、への隠しリンクとは異なります。Function.prototype
作成する関数のオブジェクトは、プロトタイプprototype
と同じではありません。Function's
fn.prototype != Function.prototype // true
つまり、を拡張するFunction.prototype
と、メソッドは関数参照で使用できるようになります。関数の を拡張するprototype
と、それらのメソッドは、そのコンストラクターを使用して構築されたオブジェクトで使用できるようになります。