ECMAScript 2019 中的 new.target 和 ES6 中的 constructor

在 ECMAScript 2019 中,它增加了一个新的特性: new.target,它可以帮助我们更方便地识别构造函数是否被调用。

而在 ES6 中,构造函数中引入了 constructor 关键字,用于指示一个类的构造函数。

本文将探讨新特性 new.target 和 constructor,并提供深度及实用的学习和指导意义。

new.target

new.target 是指构造函数内部使用的一个元属性,它返回 new 操作符的目标构造函数。如果函数不是通过 new 操作符调用的,则 new.target 的值为 undefined。

以下是一个简单的例子:

在这个例子中,我们在 Foo 构造函数中使用了 new.target,然后我们创建了一个名为 Foo 的类的新实例。

当我们通过 new 操作符调用时,new.target 等于该类本身,而当我们直接调用 Foo 函数时,new.target 等于 undefined。

new.target 可以用来检测子类是否通过 new 关键字继承,例如:

在这个例子中,我们创建了一个 Parent 类和 Child 类,Child 继承了 Parent。

当我们用 new 调用 Parent 类时,new.target 等于 Parent 类本身。

当我们用 new 调用 Child 类时,new.target 等于 Child 类本身,这是 new.target 的一个强大功能,它可以让我们检测子类是否通过 new 继承。

constructor

constructor 是 ES6 中的一个关键字,用于声明一个类的构造函数。它可以让我们更清晰地定义一个类的实例属性。

下面是一个示例:

在这个例子中,我们定义了一个名为 Person 的类和它的构造函数。构造函数中我们通过 this 关键字为每个实例添加了一个名为 name 的属性。

使用 constructor 可以使 Person 类更加清晰,也可以在实例化时轻松地初始化属性。

constructor 还可以被用来控制类的继承,下面是一个继承示例:

在这个例子中,我们定义了一个 Animal 类和它的构造函数和一个方法 speak。然后我们定义了一个名为 Dog 的类并扩展了 Animal。

在 Dog 类的构造函数里,我们通过 super(name) 调用了 Animal 类的构造函数。这样所有的 Dog 实例都会继承 Animal 实例的 name 属性。

最后我们重新定义了 Dog 的 speak 方法,这样 Dog 实例调用 speak 方法就会输出 'Mitzie barks.'。

在这个例子中,constructor 让我们轻松地扩展了 Animal 类并控制了 Dog 的初始化。

总结

new.target 和 constructor 是 ES6 和 ECMAScript 2019 中的两个重要特性,在类和构造函数中都扮演着重要的角色。

new.target 可以让我们更好地识别构造函数是否被调用,并且还可以帮助我们检测子类是否通过 new 继承。

而 constructor 可以让我们清晰地定义类的构造函数,控制类的继承和实例化时的属性初始化。

了解和使用这两个特性,将使我们编写的代码更加简洁和可读,并提高代码的可维护性和可扩展性。

参考

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65a7608badd4f0e0ff0693b0


纠错反馈