2016-07-08 15 views
0

私はコンストラクタについて勉強していたので、newキーワードを見つけました。new演算子はどこに新しいオブジェクトを作成しますか?

var obj = new myContructor();

私は、それが新しいオブジェクトを作成したことを知ったconstructor.prototypeとしてのプロトタイプを設定し、thisキーワードで応じてそのプロパティを設定し、最後にそのオブジェクトを返します。

ここでは、新しいオブジェクトをどこに作成するのか、内部のメモリとして、またはどこが揮発性であるのかと混同しています。

オブジェクトを返すと、var objの場所に新しいオブジェクトのコピーが作成されるか、新しいオブジェクトが作成された場所にobjが参照されますか?

+0

ThisBindingは、オブジェクトへの参照を保持する特殊なCPUレジスタのように、JavaScriptインタプリタがJavaScriptコードを評価する際に維持するものです。インタプリタは、3つの異なるケースのうちの1つで実行コンテキストを確立するたびにThisBindingを更新します。 [THIS](http://stackoverflow.com/questions/3127429/how-does-the-this-keyword-work)のリンクを確認してください。 – Shubham

+0

私はこれをあまりにも広範囲に閉じていますが、これはいくつかの投稿と重複する可能性があります。 MDNで説明されています。 – Jai

+0

オブジェクトはJavaScriptランタイムによって管理されるヒープ上に作成されます。オブジェクトは「参照の値」によって渡されるため、ヒープ内のメモリ位置に対応する数値が返されます(参照)。この番号(別名「参照」)はコピーされます。オブジェクト全体をコピーするのは非常に高価で、あなたが普通にやりたいことではありません。 – Ben

答えて

1

Javascriptの背後には多くのことが起こっています。物事はいつもあなたがアクセスすることができないメモリ内にを作成されています。限りJavascriptのコードを書いている間、あなたがこれに懸念しているよう:

  1. newオブジェクトを作成し、すべてのプロトタイプのもの
  2. myConstructor()をして実行され、関数内thisは、そのオブジェクト
    に設定されています(別の言い方をすれば:myContructorは、コンテキストとしてのオブジェクトと呼ばれている)myConstructorが行われた後
  3. 、オブジェクトはすべてこの
  4. の結果として、変数 objに割り当てられています

myConstructorが返すものとその結果にどのように影響するかに関する警告がありますが、わかりやすくするために無視します。イベントの基本的な連鎖はnewですオブジェクトを作成する→myConstructorはそのオブジェクトをthisobjという名前で返します。返す値はnewです。

もちろん、オブジェクトを作成して別の場所に渡すことは、Javascriptエンジンによって行われ、メモリ内のオブジェクトの内部格納が必要です。

2

メモリ内のどこか、それはもちろん、

はい揮発性です。プログラム内の他のデータと同じように。

それはあなたが関数呼び出しを行っているオブジェクト

ことRETURNS言ったときに私たちが意味しています。関数呼び出しには戻り値があります。オブジェクトは、その関数呼び出しの戻り値です。それは関数でそれを作成するvar OBJ

の位置に新たなオブジェクトのコピーを作成し、それは(単に他のオブジェクトのように)それへの参照を返す

、及びその参照は、代入を使用したために変数に格納されます。

+1

Mumble mumble nitpick:オブジェクトは直接関数呼び出しの戻り値ではありません(もちろんそうでない限り)。これは本当に 'new'演算子の結果です:o) – deceze

+0

'関数の中にオブジェクトを作成する'とはどういう意味ですか? –

関連する問題