17

他の人が継承する最初の親オブジェクトにどのパラメーターを渡す必要があり、どちらがより効率的ですか

Object.create(Object.prototype)

Object.create(Object)

Object.create(null)  

Object.create(null)空のオブジェクトを返します

Object.create(Object)関数を返す理由????(ログを確認したところ、関数と表示されています...使用した console.dir() )

Object.create(Object)空でないオブジェクトを返します

この全体がどのように機能するのですか...私は Classname .prototype のものに慣れています:(

ここで何が起こっているのか理解できません

4

2 に答える 2

2

返されるのはオブジェクトです。

>>> typeof Object.create(Object)
<<< "object"
>>> Object.create(Object)
<<< Function {}
//           ^^

FunctionChrome がオブジェクトのコンストラクターをアドレス指定する名前です。Chrome Dev Tools のカスタム クラスの JavaScript クラス名はどのように計算されますか?を参照してください。


回答のこの部分では、質問の @phenomnomnominal のコメントに対処し、作成されたオブジェクトが などの関数プロパティを継承している理由を説明していますcall

Objectコンストラクターは関数であるため、Functionプロトタイプから継承します。

>>> Object.call === Function.prototype.call
<<< true

したがって、プロトタイプとして持つオブジェクトはObject、プロトタイプ チェーンを介して Function プロトタイプへのリンクも持ちます。

>>> Object.create(Object).call === Function.prototype.call
<<< true

@TJ が述べたように、コンストラクターをプロトタイプとして使用するのはかなり奇妙です。作成されたオブジェクトが継承するプロトタイプとしてオブジェクトを指定する必要があります。@TJ は、この部分を説明するのにかなり良い仕事をしました。

于 2013-05-21T09:25:32.857 に答える