ES7 中的 New.target 用于构造函数内部的 this 传递

阅读时长 2 分钟读完

在 JavaScript 中,构造函数是创建对象的一种方式。构造函数中的 this 关键字通常用于引用新创建的对象。但是,当构造函数被继承时,this 关键字可能会引用子类对象而不是父类对象。这时候就需要使用 ES7 中引入的 New.target 关键字来解决这个问题。

什么是 New.target

New.target 是 ES7 中引入的一个元属性,它只能在构造函数中使用。当构造函数通过 new 关键字调用时,New.target 会指向构造函数本身;当构造函数被子类继承时,New.target 会指向子类的构造函数。

如何使用 New.target

使用 New.target 的主要目的是在构造函数中传递 this。在构造函数中使用 New.target 可以确保 this 引用了正确的对象。

下面是一个使用 New.target 的例子:

-- -------------------- ---- -------
----- ------ -
  ----------------- -
    -- ----------- --- ------- -
      ----- --- ------------- ------ -- ------------ ------------
    -
    --------- - -----
  -
-

----- -------- ------- ------ -
  ----------------- ------ -
    ------------
    ---------- - ------
  -
-

----- ------ - --- --------------- -- ------ -- -----
----- -------- - --- ---------------- -------------
--------------------------- -- ------
---------------------------- -- -----------

在上面的例子中,Person 类被设计为一个抽象类,不能直接实例化。如果直接实例化 Person 类,会抛出一个错误。Employee 类继承了 Person 类,并在构造函数中调用了 super() 方法来调用父类的构造函数。由于 Employee 类继承了 Person 类,它的 New.target 会指向 Employee 构造函数。因此,在 Employee 的构造函数中,this 引用了正确的对象。

结论

使用 New.target 可以在构造函数中传递正确的 this,确保子类使用正确的构造函数创建对象。这个特性在开发中非常有用,可以帮助我们避免一些潜在的错误。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6756550b3af3f99efe5ab11e

纠错
反馈