首页 >web前端 >js教程 >JavaScript 中的 new 运算符如何创建对象并建立其继承关系?

JavaScript 中的 new 运算符如何创建对象并建立其继承关系?

Linda Hamilton
Linda Hamilton原创
2024-10-27 01:46:30727浏览

How Does the `new` Operator in JavaScript Create Objects and Establish Their Inheritance?

揭秘 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]]机制,该机制:

  1. 创建一个原生对象。
  2. 将其 [[Prototype]] 设置为函数的原型或 Object.prototype(如果原型是原始类型)。
  3. 使用对象作为“this.prototype”调用函数。 "
  4. 如果函数返回原语,则返回内部创建的对象;如果返回对象,则返回函数返回的对象。

实际应用

说明这个概念的力量:

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

var obj = NEW(Foo, 'bar');

这将创建一个继承自 Foo 的对象,具有“继承”继承属性,以及值为“bar”的“prop”属性。

以上是JavaScript 中的 new 运算符如何创建对象并建立其继承关系?的详细内容。更多信息请关注PHP中文网其他相关文章!

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