New運算子工作原理

2021-10-20 11:41:27 字數 973 閱讀 7116

// 模擬new運算子工作原理的 new1

varnew1

=function

(func,value)

else

}// m 建構函式

varm

=function

(name)

m.prototype.

talk

=function()

// new 生成的 o1

var o1 =

newm

('o1'

)console.

log(o1)

// m

o1.talk()

// talk

// 驗證模擬new運算子的 new1

var o2 =

new1(m

,'o2'

)//傳入m建構函式和引數

console.

log(o2)

// m

o2.talk()

// talk

o2 instanceof

m// true

o2 instanceof

object

// true

o2.__proto__ ===

m.prototype // true

o2.__proto__.constructor ===

m// true

乙個新物件被建立,它繼承自foo.prototype(就是利用 object.create 方法將 foo.prototype 作為新物件的原型物件)

建構函式foo被執行,執行的時候,相應的傳參會被傳入,同時上下文(this)會被指定為這個新例項。new foo 等同於new foo(),只能用在不傳遞任何引數的情況。

如果建構函式返回(return)了乙個「物件」,那個這個物件會取代new出來的結果。如果建構函式沒有返回物件,那麼new出來的結果為步驟1建立的物件。

new 運算子實現原理

方法說明 new運算子會建立乙個使用者自定義物件型別 就是自定義函式 或者說建構函式 的例項或具有建構函式的內建物件 比如 number string等原生物件 的例項,具體的過程如下 建立乙個空物件,將第一步的空物件鏈結到另乙個物件 new操作符後面跟著的建構函式的原型物件 將第一步建立的物件作為...

定位new運算子

通常,new 從堆中分配記憶體,但它還有另一種稱為 定位 placement new 運算子,它可以讓我們指定要使用的位置。可以通過這個特性來設定記憶體管 理規程,處理需要通過特定位址進行訪問的硬體或在特定位置建立物件。要使用定位 new 特性,需要包含標頭檔案 new。使用定位 new 運算子時,...

定位 new 運算子

定位 new 運算子 和普通的new 運算子在堆上隨機分配記憶體相比,定位 new 運算子可以在特定的位址位置 定位 new 運算子的具體使用例項 const int buf 512 const int n 5 char buffer buf void part9 newplace 定位new 的其...