ECMAScript 2017 中的 new.target 指向构造函数对象的使用方法

引言

在 ECMAScript 2017 中,引入了一个新的特性:new.target。这个特性可以让我们更方便地在构造函数中获取当前实例化的构造函数对象,从而实现更加灵活和可维护的代码。本文将详细介绍 new.target 的使用方法,并提供示例代码帮助读者更好地理解。

new.target 的基本用法

new.target 是一个元属性(meta property),它可以在构造函数中使用,表示当前正在实例化的构造函数对象。例如:

在上面的代码中,我们定义了一个基类 Animal 和一个继承自 Animal 的子类 Dog。在 Animal 的构造函数中,我们打印了 new.target 的值,可以看到当我们实例化 AnimalDog 时,分别输出了 AnimalDog

从上面的示例中,我们可以看到 new.target 可以让我们在构造函数中获取当前实例化的构造函数对象,这对于实现一些基于继承的逻辑非常有用。

new.target 和工厂函数

除了在构造函数中使用,new.target 还可以在工厂函数中使用。工厂函数是一种创建对象的函数,它并不是构造函数,但是可以返回一个新的对象。

在工厂函数中,我们可以使用 new.target 来判断当前函数是否被通过 new 关键字调用。例如:

在上面的代码中,我们定义了一个工厂函数 createAnimal,它可以通过 new 关键字调用返回一个新的 Animal 对象,也可以直接调用返回一个普通对象。在函数中,我们使用了 new.target 来判断当前函数是否被通过 new 关键字调用,从而决定返回的对象类型。

new.target 和继承

new.target 还可以用于继承中。在继承中,子类可以通过 super() 调用父类的构造函数,这时候 new.target 就非常有用了。

在子类的构造函数中,new.target 表示的是子类的构造函数对象,而不是父类的构造函数对象。例如:

在上面的代码中,我们定义了一个基类 Animal 和一个继承自 Animal 的子类 Dog。在 Animal 的构造函数中,我们打印了 new.target 的值,可以看到当我们实例化 AnimalDog 时,分别输出了 AnimalDog

总结

new.target 是 ECMAScript 2017 中的一个新特性,它可以让我们更方便地在构造函数中获取当前实例化的构造函数对象,从而实现更加灵活和可维护的代码。在本文中,我们介绍了 new.target 的基本用法、和工厂函数的结合、以及和继承的结合。通过这些示例代码,相信读者已经掌握了 new.target 的使用方法,可以在实际开发中应用它来提高代码质量和可维护性。

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


纠错
反馈