2016-07-08 35 views
0

我正在學習構造函數,並且遇到了關鍵字new新操作符在哪裏創建新對象?

var obj = new myContructor();

我才知道,它創造了一個新的對象,設置它的原型constructor.prototype,設置其屬性與this根據關鍵字,最後返回該對象。

現在,我很困惑它在哪裏創建新的對象,因爲內部存儲器或其中的易失性的地方。

當我們說它返回那個對象時,它在var obj的位置創建一個新對象的副本,還是它將obj引用到創建新對象的任何位置?

+0

ThisBinding是JavaScript解釋器在評估JavaScript代碼時所維護的東西,就像一個特殊的CPU寄存器,它持有對對象的引用。每當僅在三種不同的情況中的一種情況下建立執行上下文時,解釋器就更新ThisBinding。 檢查[此](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以對象作爲上下文被調用)
  3. myConstructor完成後,對象被分配給變量obj作爲所有這些的結果

關於什麼myConstructor可以返回以及如何影響結果有一系列注意事項,但爲簡單起見,我們將忽略它。基本事件鏈是new創建對象→myConstructor將該對象視爲thisobj「接收」此對象作爲返回值new

當然,所有這些創建對象並將它傳遞到不同的地方都是由JavaScript引擎完成的,並且需要內存中某個對象的內部存儲。

2

內部存儲器或地方在那裏它是揮發性

是的,當然。就像程序中的其他任何數據一樣。

做我們的意思是說,它返回一個對象

你正在一個函數調用時。函數調用具有返回值。該對象是該函數調用的返回值。

它在VAR OBJ

它創建它在函數的位置創建新對象的副本,則它返回到它的基準(就像任何其他對象),並該引用存儲在變量中,因爲您使用了賦值。

+1

嘟nit nitpick:該對象不是直接函數調用的返回值(除非它是,當然)。這真的是'new'運算符的結果......:o) – deceze

+0

你是什麼意思'創建對象內部功能'? –