首頁 > web前端 > js教程 > 「new」運算子如何在幕後工作以建立和初始化 JavaScript 中的物件?

「new」運算子如何在幕後工作以建立和初始化 JavaScript 中的物件?

Patricia Arquette
發布: 2024-10-29 03:21:02
原創
555 人瀏覽過

How does the `new` operator work behind the scenes to create and initialize objects in JavaScript?

new 運算子如何在JavaScript 中建立和初始化物件

new 運算子是JavaScript 中用於建立新物件的強大關鍵字。它在物件導向程式設計中起著至關重要的作用,但要完全理解它可能具有挑戰性,特別是在原型鏈方面。

理解新的Operator

使用時使用帶有函數的new 運算符,內部會發生以下步驟:

  1. 建立一個新的原生物件。
  2. 物件的內部 [[Prototype]] 屬性設定為函數的原型屬性。
  3. 使用新建立的物件作為其 this 值來呼叫函數。
  4. 如果函數傳回原始值,則傳回內部建立的物件。
  5. 否則,如果函數傳回一個對象,則內部建立的物件將被放棄。

範例實作

為了示範new 運算子的功能,這是一個等效的實作:

<code class="javascript">function NEW(f) {
  let obj, ret, proto;

  // Check if `f.prototype` is an object
  proto = f.prototype ? f.prototype : Object.prototype;

  // Create an object inheriting from `proto`
  obj = Object.create(proto);

  // Call the function with `obj` as `this`
  ret = f.apply(obj, Array.prototype.slice.call(arguments, 1));

  // Return the object from the function or the newly created `obj`
  return Object(ret) === ret ? ret : obj;
}</code>
登入後複製

範例用法

考慮這個範例:

<code class="javascript">function Foo(arg) {
  this.prop = arg;
}
Foo.prototype.inherited = 'baz';

let obj = NEW(Foo, 'bar');
console.log(obj.prop); // Output: "bar"
console.log(obj.inherited); // Output: "baz"
console.log(obj instanceof Foo); // Output: true</code>
登入後複製

這示範了new 運算子如何建立物件繼承自函數的原型,並允許存取其屬性和方法。

以上是「new」運算子如何在幕後工作以建立和初始化 JavaScript 中的物件?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板