返回

ES5与ES6的继承:开拓面向对象编程的新篇章

前端

ES5的原型链继承

在ES5中,继承机制主要依赖原型链。每个对象都有一个原型对象,原型对象又可能拥有自己的原型对象,以此类推,最终形成一条原型链。子对象可以通过原型链继承父对象的方法和属性。

原型链继承的实现

在ES5中,我们可以使用Object.create()方法来创建一个新对象,并将另一个对象作为其原型对象。例如:

function Person(name) {
  this.name = name;
}

Person.prototype.greet = function() {
  console.log(`Hello, my name is ${this.name}.`);
};

const john = new Person('John Doe');

在这个例子中,Person()是一个构造函数,它创建了一个新的Person对象,并将其赋值给变量john。同时,Person()还创建了一个原型对象,该原型对象拥有一个greet()方法。john可以通过原型链继承该方法。

ES6的类继承

ES6引入了class,可以使用它来定义一个类。类是一种特殊的函数,它可以创建对象实例。类继承是通过extends关键字实现的。

类继承的实现

在ES6中,我们可以使用class关键字来定义一个类,并使用extends关键字来继承另一个类。例如:

class Person {
  constructor(name) {
    this.name = name;
  }

  greet() {
    console.log(`Hello, my name is ${this.name}.`);
  }
}

class Student extends Person {
  constructor(name, major) {
    super(name);
    this.major = major;
  }

  study() {
    console.log(`${this.name} is studying ${this.major}.`);
  }
}

const john = new Student('John Doe', 'Computer Science');

在这个例子中,Person类是一个父类,Student类是一个子类。Student类继承了Person类的所有方法和属性,并添加了一个新的方法study()johnStudent类的一个实例。

ES5和ES6继承机制的比较

特征 ES5 ES6
继承方式 原型链继承 类继承
语法 使用Object.create()方法创建对象并指定原型对象 使用class关键字定义类并使用extends关键字继承另一个类
实例化对象 使用new关键字实例化对象 使用new关键字实例化对象
访问父类方法和属性 通过原型链访问父类的方法和属性 通过super关键字访问父类的方法和属性
扩展父类 可以通过修改原型对象来扩展父类 可以通过定义新的方法和属性来扩展父类

总结

ES5和ES6的继承机制有着本质的不同。ES5采用原型链继承,而ES6则采用了类继承。类继承更加简单直观,而且更符合面向对象编程的理念。在实际开发中,我们应该根据项目的具体情况来选择合适的继承机制。