偶尔笔记-分别用ES5和ES6的方式解决一个继承问题

208 阅读2分钟

继承是面向对象编程中的一个重要概念,它允许我们在现有类的基础上创建新的类,并在新类中重用现有类的属性和方法。

在ES5和ES6中,我们可以使用不同的方式实现继承。

ES5中实现继承的方式:

在ES5中,我们可以使用原型链来实现继承,代码如下:

// 定义一个父类
function Father(name) {
  this.name = name;
}
Father.prototype.walk = function() {
  console.log(this.name + ' is walking.');
};

// 定义一个子类
function Son(name) {
  Father.call(this, name);
};
Son.prototype = Object.create(Father.prototype);
Son.prototype.constructor = Son;
Son.prototype.bark = function() {
  console.log(this.name + ' is barking.');
};

// 创建一个实例
var son = new Son('Jack');
son.walk(); // 输出: Jack is walking.
son.bark(); // 输出: Jack is barking.

在上面的代码中,我们首先定义了一个Father父类,然后定义了一个Son子类,使用Object.create方法将Son的原型设置为Father的原型,并将Son的构造函数设置为Son本身。这样就可以实现从Father继承到Son的功能。

ES6中实现继承的方式:

在ES6中,我们可以使用class关键字和extends关键字来实现继承,代码如下:

// 定义一个父类
class Father {
  constructor(name) {
    this.name = name;
  }
  walk() {
    console.log(this.name + ' is walking.');
  }
};

// 定义一个子类
class Son extends Father {
  constructor(name) {
    super(name);
  }
  bark() {
    console.log(this.name + ' is barking.');
  }
};

// 创建一个实例
let son = new Son('Jack');
son.walk(); // 输出: Jack is walking.
son.bark(); // 输出: Jacl is barking.

在上面的代码中,我们首先定义了一个Father父类,然后定义了一个Son子类,使用extends关键字让Son继承自Father,并使用super关键字在Son的构造函数中调用Father的构造函数。这样就可以实现从Father继承到Son的功能。

总的来说,ES6中的class语法相对于ES5的原型链方式更加简洁易懂,同时ES6也提供了更多的面向对象编程的特性和语法糖,使得继承和其他面向对象编程的操作更加便捷和灵活。

感谢大家的阅读,我是捞佬,我们下次再见!88