6

ここで述べたhttps://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function関数オブジェクトのインスタンスのコンストラクタ プロパティは、「オブジェクトのプロトタイプを作成する関数を指定します」。これは紛らわしいので、Object.constructorは「オブジェクトのプロトタイプを作成する関数」ですか? 「オブジェクト」とは正確にはどのオブジェクトですか?

Object.constructor のコンストラクター プロパティ自体がなぜなのかを理解しようとしています。

Object.constructor===Object.constructor.constructor // なぜ?

編集:TJ Crowderの答えは良いと思いますが、彼の言葉の言い回しはかなりあいまいです(少なくとも私にとっては、最初に読んだときに理解するのが難しくなっています). これが言い換えられた答えです:

1)オブジェクト関数のインスタンスです

2)オブジェクトにはコンストラクターというプロパティがないため、 Object.constructorを呼び出すと、実際にはObject.[[prototype]].constructor (別名Object.__ proto __.constructor ) が返されます。

3) Object.constructor (別名Object.__ proto __.constructor ) はFunctionのインスタンスです。

4) ObjectObject.constructor (別名Object.__ proto __.constructor ) の両方がFunctionのインスタンスであるため、両方とも同じオブジェクトを参照する__ proto __プロパティを持っています。つまり、Object.__ proto __ === Object.constructor.__ proto __ (別名Object.__ proto __.constructor._ proto _ )

5) Object.constructor===Object.constructor.constructorの行は、実際にはObject.__ proto __.constructor===Object.constructor.__ proto __.constructorの行と同じです。

6) 手順 4 と 5 を組み合わせると、Object.constructor===Object.constructor.constructorが得られます。

7) 手順 4) に進む

4

2 に答える 2

6

Objectは、Functionであり、FunctionコンストラクターはであるためFunction、そのコンストラクターはそれ自体です。

「オブジェクト」は、オブジェクト指向プログラミングの基本的な構成要素です。ObjectJavaScriptでは、はコンストラクター関数です(、、DateなどRegExp)。newその仕事は、キーワードを介してインタプリタによって作成されたオブジェクトの新しいインスタンスを初期化することです。

コンストラクターについて質問しているので、これはトピックから外れている場合もあれば、そうでない場合もあります。

JavaScriptの任意の関数は、コンストラクター関数にすることができます。それは純粋にあなたがそれをどのように使うかという問題です。検討:

function Foo() {
}

私がそれをこのように呼ぶならば:

var f = Foo();

...これは退屈な古い関数であり、f受信しますundefinedFoo何も返さないため)。しかし、私がそれをこのように呼ぶならば:

var f = new Foo();

...コンストラクター関数として使用していますが、もっと興味深いことが起こります。

  1. インタプリタは、新しい空白のオブジェクトを作成します。
  2. インタプリタは、新しいオブジェクトの基礎となるプロトタイプをに設定しますFoo.prototype
  3. インタプリタは、新しいオブジェクトFooを参照するように呼び出します。this
  4. Foo完了したときにFoo、値を返さない(またはオブジェクトを返さない)場合、new式の結果は手順1で作成されたオブジェクトになります(Fooオブジェクトを返す場合は、代わりにそのオブジェクトが使用されます。これは最も高度な機能です。人々はする必要はありません。)
于 2011-05-11T11:38:49.480 に答える
6

JavaScript オブジェクトのレイアウト

ここに画像の説明を入力

于 2011-05-11T11:47:08.177 に答える