5

私は JavaScript が初めてで、Douglas Crockford の本The Good Partsに従っています。

それは言います:

すべての関数オブジェクトもprototypeプロパティで作成されます。constructorその値は、値が関数であるプロパティを持つオブジェクトです。これは、 への隠しリンクとは異なりFunction.prototypeます。

関数オブジェクトが にリンクされていることは理解していますがFunction.prototype、上記の行はどういう意味ですか?

誰かが私のためにそれを単純化できますか?

4

1 に答える 1

9

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

于 2013-09-20T11:38:50.290 に答える