ES6 的类 (Class) 与继承

阅读时长 4 分钟读完

传统的原型链继承

在 JavaScript 中,对象继承是通过原型链来实现的。每个对象都有一个原型,原型又有自己的原型,形成了一条原型链。

传统的原型链继承有以下缺点:

  1. 对象实例与构造函数之间的关系不够清晰。
  2. 继承只能是单向的,即子类只能继承父类的属性和方法,无法向父类传递属性和方法。
  3. 子类无法重写父类的方法。

ES6 引入了类的概念,通过 class 关键字可以定义一个类。类中可以定义属性和方法,类似于传统的面向对象编程语言。

ES6 的类继承通过 extends 关键字来实现,子类可以继承父类的属性和方法,并且可以重写父类的方法。ES6 的类继承替代了传统的原型链继承,使代码更加清晰易懂。

定义类

定义一个类需要使用 class 关键字,类名一般以大写字母开头。类中可以定义 constructor 构造函数和其他方法。

继承类

使用 extends 关键字可以实现类的继承,子类可以继承父类的属性和方法。

super 关键字

在子类的 constructor 中,必须调用 super() 方法来调用父类的 constructor,否则会报错。

在子类的方法中,可以通过 super 关键字来调用父类的方法。

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

静态方法和属性

类还可以定义静态方法和静态属性,使用 static 关键字来定义。

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

示例代码

下面是一个完整的示例代码,演示了 ES6 的类和继承的用法。

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

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

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

总结

ES6 的类和继承替代了传统的原型链继承,使代码更加清晰易懂。类中可以定义属性、方法、静态方法和静态属性,子类可以继承父类的属性和方法,并且可以重写父类的方法。在子类中必须调用 super() 方法来调用父类的 constructor,可以通过 super 关键字来调用父类的方法。

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

纠错
反馈