首页 > web前端 > js教程 > `new.target` 如何在 ES6 类中启用继承并区分构造函数调用?

`new.target` 如何在 ES6 类中启用继承并区分构造函数调用?

Mary-Kate Olsen
发布: 2024-11-03 11:53:29
原创
544 人浏览过

How does `new.target` Enable Inheritance and Differentiate Constructor Calls in ES6 Classes?

理解“new.target”

定义和位置

尽管在 ECMAScript 2015 规范中只提到了 3 次,但“new.target”是§12.3.8.

目的和用法

中定义的元属性“NewTarget”检索当前函数环境的 [[NewTarget]] 内部属性的值。当函数作为构造函数调用时,会设置此值。

如果使用 new 调用函数,new.target 将引用用于创建新实例的构造函数。这使开发人员能够区分构造函数和普通函数调用。

对于 ES6 类的意义

“NewTarget”在 ES6 类中起着至关重要的作用。当使用 new 调用类构造函数时,它返回最初未初始化的 this。然而,super() 通过调用父构造函数并传递 new.target 作为参数来初始化它。

这种机制允许类继承内置对象,例如 Array 或 Map。通过将 new.target 传递给父构造函数,建立了正确的原型链,确保新实例继承自适当的原型对象。

示例

考虑以下类结构:

class Parent {
  constructor() {
    // new.target = Child (from super() call)
    console.log(new.target);
  }
}

class Child extends Parent {
  constructor() {
    // new.target = Child (from new call)
    super();
    console.log(this);
  }
}

new Child;
登录后复制

在此示例中,new.target 为:

  • Parent 构造函数中的子级(通过 super() 调用调用)
  • Child 构造函数中的子级(用 new 调用)

输出将是:

Child
{ __proto__: Child.prototype }
登录后复制

这演示了如何使用 new.target 来区分构造函数和普通函数调用,以及管理 ES6 类中的继承。

以上是`new.target` 如何在 ES6 类中启用继承并区分构造函数调用?的详细内容。更多信息请关注PHP中文网其他相关文章!

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