揭秘JavaScript 中新運算符的內部工作原理
JavaScript 的誤解領域,類似於原型鏈,揭示了一個基本查詢: 「new」運算子如何編排物件創建,定義其沿襲和核心屬性?
new 的本質
要解開這個謎團,請考慮另一個例子:
function NEW(f) { var obj, ret, proto; // Examine `f.prototype` proto = Object(f.prototype) === f.prototype ? f.prototype : Object.prototype; // Inherit from `proto` obj = Object.create(proto); // Invoke `f` with `obj` as `this` ret = f.apply(obj, Array.prototype.slice.call(arguments, 1)); // Determine return type if (Object(ret) === ret) { // Object returned? return ret; } // Otherwise, return inherited object return obj; }
理解機制
理解機制理解機制
新算子依賴內部[[Construct]]機制,該機制:
function Foo(arg) { this.prop = arg; } Foo.prototype.inherited = 'baz'; var obj = NEW(Foo, 'bar');
建立一個原生物件。
將其 [[Prototype]] 設定為函數的原型或 Object.prototype(如果原型是原始類型)。 使用物件作為「this.prototype」呼叫函數。 "如果函數返回原語,則返回內部創建的對象;如果返回對象,則返回函數返回的對象。實際應用說明這個概念的力量:這將建立一個繼承自Foo 的對象,具有「繼承」繼承屬性,以及一個值為「bar」的「prop」屬性。 >以上是JavaScript 中的 new 運算子如何建立物件並建立其繼承關係?的詳細內容。更多資訊請關注PHP中文網其他相關文章!