ECMAScript 2017 中的 class 语法糖:constructor、extends 和 super 的使用方法

阅读时长 7 分钟读完

前言

在过去,JavaScript 中实现面向对象编程是通过原型链来实现的,这样做非常笨拙。而在 ECMAScript 2015 中,引入了 class 语法糖,让这一过程更加简单。在 ECMAScript 2017 中,这个 class 语法糖进一步扩展,我们可以更加方便的使用 constructorextendssuper 来创建类(Class)和子类(Subclass)。

在本篇文章中,我们会深入探讨这些新增的 class 语法糖的使用方法,同时附上示例代码,帮助读者更好地理解。

类(Class)

类是一种函数,它具有属性和方法。与函数不同的是,类必须使用 new 关键字来实例化。

创建类

我们可以使用 class 关键字来创建一个类:

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

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

上面的代码创建了一个名为 Person 的类,它有两个属性 nameage,以及一个名为 sayHello 的方法。这个类通过 constructor 函数来初始化属性。

现在我们可以使用 new 关键字来创建一个 Person 的实例:

继承

继承是 OOP 中的一个重要概念,它允许我们从一个现有的类中派生出一个新的类。新的类称为子类,现有的类称为基类(或父类)。

在 JavaScript 中,我们可以使用 extends 关键字和 super 函数来实现继承。

下面是一个子类(Developer)继承自一个基类(Person)的示例:

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

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

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

在上面的代码中,我们使用 extends 关键字来创建一个类 Developer,这个类是从 Person 类派生出来的。在子类的 constructor 函数中,我们通过 super 函数来调用父类的 constructor 函数,以初始化基类的属性。我们还新增了一个名为 skills 的属性,以及一个名为 showSkills 的方法。

现在我们来创建一个 Developer 的实例:

在上面的代码中,我们通过 new 关键字来创建一个 Developer 的实例,然后调用 sayHello()showSkills() 方法,这些方法是从 Person 类和 Developer 类继承来的。

constructor

constructor 是一个特殊的方法,它会在使用 new 关键字创建类的一个实例时被调用。 constructor 函数负责初始化类的属性。

创建基类

让我们先看一下如何在基类中使用 constructor

在上面的代码中,我们定义了一个 Person 类,并且在其中定义了一个 constructor 函数。

当我们通过下面的代码创建一个 Person 的实例时,这个实例的 name 属性和 age 属性将会被初始化:

创建子类

我们还可以在子类中使用 constructor 函数来初始化子类的属性。

下面是一个子类(Developer)使用 constructor 函数初始化自己的属性的例子:

在上面的代码中,我们先通过 super 函数来调用父类的 constructor 函数,然后再初始化子类的属性。

接下来,我们可以通过下面的代码来创建一个 Developer 的实例:

在上面的代码中,我们通过 new 关键字来创建一个 Developer 的实例,这个实例的 name 属性、age 属性和 skills 属性都已被初始化。

extends

extends 关键字用于创建子类,这个子类继承了父类的属性和方法。

我们可以通过下面的代码来创建一个子类:

在上面的代码中,我们定义了一个 Developer 类,并用 extends 关键字来表示它是从 Person 类中派生(继承)出来的。

super

在子类的构造函数中,我们可以使用 super 函数来调用父类的构造函数:

在上面的代码中,我们在子类 Developer 的构造函数中通过 super 调用了父类 Person 的构造函数。这是因为子类必须在调用 this 之前调用父类的构造函数,以确保子类的实例具有所有父类的属性。

除了在子类的构造函数中,我们还可以在子类的方法中使用 super 来调用父类的同名方法。

下面是一个例子:

在上面的代码中,我们在 Developer 类的 sayHello 方法中使用 super.sayHello() 来调用父类 PersonsayHello 方法,并输出一个自定义的字符串。

总结

通过本文的讲解,我们了解了 ECMAScript 2017 中新增的 class 语法糖,并讲解了 constructorextendssuper 的使用方法。这些知识对于我们在面向对象编程时编写更加清晰和可读性更高的代码非常有帮助。

我们希望本文能够帮助读者更好地掌握 ECMAScript 2017 中的 class 语法糖,也希望读者在了解这些新特性的基础上,能够更好地使用 JavaScript 来构建更加优秀的应用。

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

纠错
反馈