ES6 中类的继承和 super 关键字的使用方式

阅读时长 5 分钟读完

随着 JavaScript 的发展,ES6 引入了类(class)的概念,使得代码的组织和维护更加方便和规范。类在代码复用和面向对象编程方面发挥着重要作用,在实践中,类的继承和 super 关键字是我们需掌握的 JavaScript ES6 中的一门基础技能。

1. 继承

对于面向对象编程(OOP),继承是重要的一环,它允许一个子类继承父类的一些行为。在 ES6 中,我们可以使用以下语法来实现继承:

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

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

上述代码实现了 Son 类继承 Father 类,通过关键字 extends 实现。我们看下 constructor() 函数的实现:

  • 在 Son 类中,super(value1) 调用了父类的 constructor() 函数,value1 参数被传入将其作为 Father 类的实例初始化,也就是说父类的实例被声明。
  • 在 Son 类中,value2 参数创建了 Son 类的实例。

需要注意的是,如果我们没有在子类中使用 constructor() 函数,那么 JavaScript 将自动为我们创建一个默认的 constructor():

2. super

上述 super 关键字已经简单地使用了一次,默认调用父类的构造函数。除此之外,super 还可以用在如下方面:

1. 访问父级属性

在子类中使用 super. 可以访问父级的属性和方法:

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

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

上述代码中,使用 super 调用了父类中的 constructor()sayHello()

2. 调用父级方法

在子类中使用 super. 调用父级的方法:

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

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

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

上述代码中,子类 SonsayHello() 调用了父类 FathersayHello() 方法。

3. 留意 this

在继承中,需要注意 this 的指向问题。当在子类中要引用 this 时,我们要谨慎使用。比如:

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

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

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

上述代码中,子类 show() 中使用了 super.show(),依旧是调用了父类 Fathershow() 方法。值得注意的是,子类 Son 中的 this.value 覆盖了父类 Father 中的 this.value,发现其输出结果为 2 和 1。

结论

通过以上的示例,我们可以总结出几个关于 ES6 中类继承和 super 关键字的使用方式:

  1. 在子类中,使用 extends 实现继承。
  2. 在子类的 constructor() 中使用 super() 调用父类的 constructor()
  3. 在子类中,可以通过 super. 访问父级的属性和方法。
  4. 子类中也可以和父类命名相同的方法和属性,以此覆盖父类的方法和属性。
  5. 子类中使用 super. 可以调用父类的同名方法,以实现构造父类的对象。
  6. 在使用 super 时需要注意 this 的指向。

ES6 中类的继承和 super 的使用有很多细节,需要我们在实践中不断了解和使用。这些知识点是基础的,但是依然是我们必须给前端领域的学习者提供的重要知识。顺带一提,在 Vue、React、Angular 等框架的使用中,类似的继承和 super 关键字经常运用到,学好这些知识是非常有必要的。

参考

ES6 中继承和super的用法

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

纠错
反馈