ES5/ES6 的继承除了写法以外还有什么区别

本文涉及的产品
可观测可视化 Grafana 版,10个用户账号 1个月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
可观测监控 Prometheus 版,每月50GB免费额度
简介: ES5 和 ES6 的继承主要区别在于实现机制和语法糖。ES5 通过原型链和构造函数模拟类的继承,而 ES6 引入了 class 关键字,使继承更加直观和简洁,支持 super 调用父类方法,提升了代码可读性和维护性。

在 ES5 和 ES6 中,继承除了写法不同之外,还有以下一些区别:

一、语法简洁性

  • ES5:通过构造函数和原型链实现继承,代码相对复杂。例如:
    function Parent(name) {
         
      this.name = name;
    }
    Parent.prototype.sayName = function() {
         
      console.log(this.name);
    };
    function Child(name, age) {
         
      Parent.call(this, name);
      this.age = age;
    }
    Child.prototype = Object.create(Parent.prototype);
    Child.prototype.constructor = Child;
    
  • ES6:使用 classextends 关键字,语法更加简洁清晰。例如:
    class Parent {
         
      constructor(name) {
         
          this.name = name;
      }
      sayName() {
         
          console.log(this.name);
      }
    }
    class Child extends Parent {
         
      constructor(name, age) {
         
          super(name);
          this.age = age;
      }
    }
    

二、原型和构造函数的处理

  • ES5:需要手动处理原型链的连接,并且在子类型构造函数中通过 Parent.call(this) 来调用父类型构造函数实现属性继承,容易出现错误。
  • ES6extends 关键字自动处理了原型链的连接,super 关键字既可以调用父类的构造函数,也可以在子类方法中调用父类的同名方法,更加直观和安全。

三、子类对父类方法的重写

  • ES5:如果子类型要重写父类型的方法,需要直接在子类型的原型上重新定义该方法,可能会覆盖父类型原型上的其他方法,容易产生意外的副作用。
  • ES6:可以直接在子类中使用与父类同名的方法来实现重写,并且可以通过 super 关键字方便地调用父类的方法,避免了覆盖父类原型上其他方法的风险。

四、静态方法的继承

  • ES5:静态方法的继承需要手动将父类的静态方法复制到子类上。
  • ES6:子类可以直接继承父类的静态方法,无需额外的手动操作。例如:
    class Parent {
         
      static staticMethod() {
         
          console.log('Parent static method');
      }
    }
    class Child extends Parent {
         }
    Child.staticMethod(); // 'Parent static method'
    
相关文章
ES6学习(10)ES6的继承
ES6学习(10)ES6的继承
|
1月前
|
JavaScript 前端开发
es6 类与继承
ES6 的类与继承特性使得 JavaScript 的面向对象编程更加规范和易于维护,提高了代码的可读性和可复用性,广泛应用于各种复杂的 JavaScript 应用程序开发中。
|
3月前
es5 类与继承
es5 类与继承
22 0
|
7月前
ES5、ES6类的定义
ES5和ES6都支持类的定义,但ES6引入了更简洁的语法。在ES5中,类是函数,方法绑定在原型上;而ES6使用`class`关键字,构造方法为`constructor`,方法直接定义在类内。ES6的类继承使用`extends`关键字,子类需调用`super`初始化父类属性。示例展示了Person类及其Student子类的定义和方法调用。
47 1
|
7月前
es6学习笔记(三)对象
es6学习笔记(三)对象
ES6学习(十一)—Class 的基本语法和继承
ES6学习(十一)—Class 的基本语法和继承
ES5的继承和ES6的继承有什么区别
ES5的继承和ES6的继承有什么区别
76 0
ES5 / ES6 的继承除了写法以外还有什么区别
ES5 / ES6 的继承除了写法以外还有什么区别
110 0
|
JavaScript
【ES6】类
【ES6】类
61 0