在 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