すべての関数オブジェクトも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と、それらのメソッドは、そのコンストラクターを使用して構築されたオブジェクトで使用できるようになります。