10

私はJavaScriptが初めてです。私はJavaScriptの良い部分から読んでいます。それは言います:

すべての関数オブジェクトもプロトタイププロパティで作成されます

だから私はこのようなことをしました:

function test() {
}

console.log(test.prototype);

Chrome の開発者ツールを使用すると、出力は次のようになります。

ここに画像の説明を入力

私はこの出力に本当に混乱しています。constructorprototypeプロパティが再び入れ子になっているのはなぜconstructorですか? そして、なぜこれがのように続くのでしょうか? コンセプトがどこに欠けているのですか?

前もって感謝します。

4

2 に答える 2

13

関数のprototypeプロパティは、演算子で作成されたときにその関数のすべてのインスタンスが継承するオブジェクトを保持しますnew。そして、これらすべてのプロトタイプ オブジェクト (通常)にはconstructor、関数を指すプロパティがあります。循環参照があります。そのため、 はnew test()そのプロパティを継承するため、 に(new test).constructor === test評価されtrueます。

prototype関数オブジェクトのプロパティと、オブジェクトが継承するプロトタイプ オブジェクト (「内部[[prototype]]プロパティ」として参照されることが多い)を区別する必要があります。

コンストラクターは、言うまでもなく関数であり、Function両方を備えています。したがって、Function.prototypeオブジェクトから継承します。constructorプロパティは、すべての関数がコンストラクターによって構築されることを示していますFunction。開発者コンソールにオブジェクトのプロトタイプが表示される場合は、Functionそれらを見ることができます。設定にオプションがあると思います。

したがって、有名な「プロトタイプ チェーン」は、constructorおよび/またはprototypeプロパティに関するものではなく、そのオブジェクトが継承するプロトタイプ オブジェクトに関するものです。

 function test() {}              new test()
   (a Function)              (a test instance)
        ||                           ||
        ||                           ||
        \/                           \/
 Function.prototype            test.prototype
(a Function, by spec)           (an Object)
        ||                           ||
        ||                           ||
        \/                           \/
 Object.prototype             Object.prototype
        ||                           ||
        ||                           ||
        \/                           \/
       null                         null
于 2012-05-30T08:10:45.717 に答える
1

それは手に入れるのにとても良い本の1つです。

それはすべてのオブジェクト指向技術をカバーするプログラマーの観点からより多くのjavascriptをカバーし、その中のほとんどのものはjavascriptに関する他の本ではカバーされていません。

そしてプロトタイプについて。JavaScriptのすべてのオブジェクトは、隠された状態を保持します。これは、オブジェクトのプロトタイプと呼ばれる別のオブジェクトへの参照です。JavaScriptのプロトタイプオブジェクトは継承を提供し、メソッドの実装を共有することもできます。プロトタイプも連鎖します。つまり、プロトタイプオブジェクトは単なるオブジェクトであるため、プロトタイプオブジェクトは別のプロトタイプオブジェクトへの参照を維持できます。

Javascriptのプロトタイプは、私がそれを学びながら経験したように、少し複雑な部分です。

これは、jsのプロトタイプがどのように機能するかを知るための優れたリファレンスです。

于 2012-05-30T08:12:09.510 に答える