返回
ES6 Class 继承和寄生组合继承的区别
前端
2023-11-18 18:19:17
ES6 Class 继承
ES6 Class 继承是通过 extends
实现的。父类的构造函数在子类的构造函数中被调用,子类继承了父类的属性和方法。
class Parent {
constructor(name) {
this.name = name;
}
greet() {
console.log(`Hello, my name is ${this.name}.`);
}
}
class Child extends Parent {
constructor(name, age) {
super(name);
this.age = age;
}
greet() {
super.greet();
console.log(`I am ${this.age} years old.`);
}
}
const child = new Child('John', 25);
child.greet(); // Hello, my name is John. I am 25 years old.
寄生组合继承
寄生组合继承是通过创建一个新对象,并将其原型指向父类的原型对象来实现的。新对象继承了父类的属性和方法,但它不是父类的实例。
function Parent(name) {
this.name = name;
}
Parent.prototype.greet = function() {
console.log(`Hello, my name is ${this.name}.`);
};
function Child(name, age) {
const parent = new Parent(name);
parent.age = age;
return parent;
}
const child = new Child('John', 25);
child.greet(); // Hello, my name is John.
两者区别
特点 | ES6 Class 继承 | 寄生组合继承 |
---|---|---|
语法 | extends 关键字 |
Object.create() 方法 |
父类的构造函数 | 在子类的构造函数中被调用 | 不被调用 |
子类与父类 | 子类是父类的实例 | 子类不是父类的实例 |
性能 | 性能较好 | 性能较差 |
适用场景 | 父类和子类具有紧密的关系时 | 父类和子类具有松散的关系时 |
如何选择合适的继承方式
在选择继承方式时,需要考虑以下因素:
- 父类和子类之间的关系
- 性能要求
- 代码的可读性和可维护性
如果父类和子类具有紧密的关系,并且性能要求较高,则可以使用 ES6 Class 继承。如果父类和子类具有松散的关系,并且性能要求不高,则可以使用寄生组合继承。
总结
ES6 Class 继承和寄生组合继承都是实现类继承的有效方式。在选择继承方式时,需要考虑父类和子类之间的关系、性能要求以及代码的可读性和可维护性。