尽管在 ECMAScript 2015 规范中只提到了 3 次,但“new.target”是§12.3.8.
中定义的元属性“NewTarget”检索当前函数环境的 [[NewTarget]] 内部属性的值。当函数作为构造函数调用时,会设置此值。
如果使用 new 调用函数,new.target 将引用用于创建新实例的构造函数。这使开发人员能够区分构造函数和普通函数调用。
“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 为:
输出将是:
Child { __proto__: Child.prototype }
这演示了如何使用 new.target 来区分构造函数和普通函数调用,以及管理 ES6 类中的继承。
以上是`new.target` 如何在 ES6 类中启用继承并区分构造函数调用?的详细内容。更多信息请关注PHP中文网其他相关文章!