13

JavaScript では、オブジェクトはすべてのエンティティのルートですか、それとも関数はルートですか?

たとえば、次のソースobjects-functions-and-prototypes-in.htmlでは、最初に作成者が「Javascript のすべてのエンティティはオブジェクトである」と述べ、後で「新しいオブジェクトは関数のインスタンスとしてのみ作成できる」と述べています。 (「var a = new Object;」を実行しても、オブジェクトは関数です)」. 私が見る限り、著者は基本的に自分自身と矛盾しています。

また、JavaScript に関する他の多くのリソースでも、同じ混沌としたコメントを目にします。Java では簡単です。任意のクラス階層の最初のエンティティが Object クラスであることはわかっていますが、JavaScript ではカオスにしか見えません。

それで、誰かがオブジェクトが最初に来るのか関数が来るのかを明確にしてもらえますか? 根源とは。

4

3 に答える 3

10

行の終わりObject.prototypeは、オブジェクトであると思います。これが私にそう思わせる理由です:

Function.prototype;                    // the empty function object
Function.prototype.__proto__;          // the default Object prototype
Object.prototype;                      // the default Object prototype
Object.prototype.__proto__;            // null

ECMAScript 5.1仕様では、次のように記述されています。

  1. 15.3.4関数プロトタイプオブジェクトのプロパティ

    Functionプロトタイプオブジェクトの[[Prototype]]内部プロパティの値は、標準の組み込みObjectプロトタイプオブジェクトです。

  2. そして15.2.4ではオブジェクトプロトタイプオブジェクトのプロパティ

    Objectプロトタイプオブジェクトの[[Prototype]]内部プロパティの値は次のとおりです。null

于 2013-01-04T17:51:28.610 に答える
3

あなたはそれを誤解しています。

Javascript のすべて (すべての関数を含む) はオブジェクトです。

ただし、すべてのオブジェクトは関数のインスタンスです。(オブジェクトのconstructorプロパティで指定)

于 2013-01-04T17:40:17.967 に答える