在 JavaScript 中,可以通过以下方式实现继承:
-
原型链继承:使用
prototype
属性实现简单的继承关系,子类的原型指向父类的实例。function Parent() { // 父类构造函数 } function Child() { // 子类构造函数 } Child.prototype = new Parent(); // 子类原型指向父类实例
这种继承方式存在缺点,子类共享父类原型上的属性和方法,可能会导致属性污染和方法覆盖的问题。
-
构造函数继承(借用构造函数):在子类构造函数中调用父类构造函数。
function Parent(name) { this.name = name; } function Child(name) { Parent.call(this, name); // 借用父类构造函数 }
这种方式可以解决原型链继承中属性共享的问题,但无法继承父类原型上的方法。
-
组合继承:结合原型链继承和构造函数继承,利用原型链实现方法的继承,通过构造函数实现属性的继承。
function Parent(name) { this.name = name; } Parent.prototype.sayHello = function() { console.log(`Hello, I'm ${this.name}`); }; function Child(name) { Parent.call(this, name); // 继承父类属性 } Child.prototype = new Parent(); // 继承父类方法
-
ES6 的 class 和 extends:ES6 引入了 class 和 extends 关键字,更直观地实现了类和继承。
class Parent { constructor(name) { this.name = name; } } class Child extends Parent { constructor(name) { super(name); // 调用父类构造函数 } }
ES6 的 class 和 extends 提供了更清晰和简洁的语法来实现继承,而传统的原型链继承、构造函数继承和组合继承等方式则是在 ES6 之前的常见实现方法。
Was this helpful?
0 / 0