首页 >web前端 >js教程 >'new”运算符如何在幕后工作以创建和初始化 JavaScript 中的对象?

'new”运算符如何在幕后工作以创建和初始化 JavaScript 中的对象?

Patricia Arquette
Patricia Arquette原创
2024-10-29 03:21:02556浏览

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn