如何在Javascript中实现继承?有哪些方式?

在 JavaScript 中,实现继承主要有以下几种方式:

  1. 原型链继承:利用原型让一个引用类型继承另一个引用类型的属性和方法。
function Parent() { ... }
Parent.prototype.method = function() { ... }

function Child() { ... }
Child.prototype = new Parent(); // 继承Parent
let child = new Child();
child.method(); // 可以调用Parent的方法
  1. 构造函数继承:在子类构造函数中调用父类构造函数。
function Parent() { ... } 
function Child() { 
  Parent.call(this); // 继承Parent
}
let child = new Child();
  1. 组合继承:原型链继承与构造函数继承的组合。使用原型链实现对父类方法的继承,使用构造函数实现对父类属性的继承。
function Parent() { ... }
Parent.prototype.method = function() { ... }

function Child() { 
  Parent.call(this); // 继承属性
}
Child.prototype = new Parent(); // 继承方法
Child.prototype.constructor = Child;
let child = new Child();
  1. 原型式继承:使用一个空对象作为中介,继承另一个对象的属性。
let parent = { ... }; 
let child = Object.create(parent); // 创建对象,parent为原型 
child.method = function() { ... }
  1. ES6 的 class 继承:使用 extends 关键字实现继承。
class Parent { ... } 
class Child extends Parent { 
  constructor() { ... }
}
let child = new Child();

所以,总结来说 JavaScript 中实现继承的主要方式有:

  1. 原型链继承:简单,但是不能很好地继承构造函数的属性
  2. 构造函数继承:可以继承构造函数的属性,但是无法继承方法
  3. 组合继承:融合原型链继承和构造函数继承,是 JavaScript 中最常用的继承模式
  4. 原型式继承:创建一个新对象,以另一个对象为原型,简单但效率低
  5. ES6 的 class 继承:面向对象,简单易用