首页 > web前端 > js教程 > JavaScript 中的 new 运算符如何工作,以及它如何使用原型链创建对象?

JavaScript 中的 new 运算符如何工作,以及它如何使用原型链创建对象?

Patricia Arquette
发布: 2024-10-27 21:28:30
原创
309 人浏览过

How does the `new` operator work in JavaScript, and how does it create objects with their prototype chains?

new 运算符在 JavaScript 中是如何工作的?

new 运算符在 JavaScript 的面向对象编程系统中起着举足轻重的作用。了解其功能对于有效地创建和管理对象至关重要。

深入研究新运算符的实现

<code class="javascript">new dataObj(args);</code>
登录后复制

此代码片段利用内部 [[ Construct]]方法来执行一系列特定操作:

  1. 对象创建:它初始化一个新的原生对象。
  2. 原型链建立: 该对象的内部 [[Prototype]] 设置为指向 Function 原型属性。值得注意的是,如果 Function 原型属性不是对象(原始值,例如 Number、String、Boolean、Undefined 或 Null),则使用 Object.prototype 作为原型。
  3. 函数调用: 创建对象后,调用该函数,并将新创建的对象分配为其 this 值。
  4. 返回值处理: 如果被调用函数的返回值产生一个原语,返回内部创建的对象。但是,如果返回一个对象,则内部创建的对象将被丢弃。

清晰度的替代实现

为了增强理解,这里有一个替代表示new 运算符实现的功能:

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

  // Check if `f.prototype` is an object, not a primitive
  proto = Object(f.prototype) === f.prototype ? f.prototype : Object.prototype;

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

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

  if (Object(ret) === ret) { // the result is an object?
    return ret;
  }
  return obj;
}

// Example usage:
function Foo (arg) {
  this.prop = arg;
}
Foo.prototype.inherited = 'baz';

var obj = NEW(Foo, 'bar');
obj.prop; // 'bar'
obj.inherited; // 'baz'
obj instanceof Foo // true</code>
登录后复制

在此示例中:

  • NEW 是模拟 new 运算符行为的自定义函数。
  • 它检查如果 Function 原型属性是一个对象,则使用 Object.prototype 来创建新对象。
  • NEW 将函数应用到新创建的对象作为其 this 值。
  • 函数的返回值决定最终要返回的对象。

以上是JavaScript 中的 new 运算符如何工作,以及它如何使用原型链创建对象?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板