JavaScript 继承百花齐放:从原型链到 ES6 类
// 定义一个基类
class Animal {
constructor(name) {
this.name = name;
}
speak() {
console.log(`${this.name} makes a sound!`);
}
}
// 使用ES6继承创建一个Dog类
class Dog extends Animal {
constructor(name, breed) {
super(name); // 调用父类构造函数
this.breed = breed;
}
bark() {
console.log(`${this.name} barks!`);
}
}
// 使用Mixin模式创建一个新的类
const mix = (...mixins) => (Base) => {
class MixedClass extends Base {
constructor(...args) {
super(...args);
mixins.forEach((mixin) => {
if (mixin.initialize) {
mixin.initialize.apply(this, args);
}
});
}
}
return mixins.reduce((c, mixin) => mixin(c), MixedClass);
};
// 定义一个Mixin,增加飞行能力
const FlyingMixin = (SuperClass) => {
return class extends SuperClass {
fly() {
console.log(`${this.name} is flying!`);
}
};
};
// 使用Mixin增强Dog类
const FlyingDog = FlyingMixin(Dog);
// 测试继承和Mixin
const dog = new Dog('Rex', 'Border Collie');
dog.speak(); // 输出: Rex barks!
const flyingDog = new FlyingDog('Bird Dog', 'Border Collie');
flyingDog.fly(); // 输出: Bird Dog is flying!
这个例子展示了如何在JavaScript中使用ES6的class关键字来创建一个基类,并且演示了如何使用继承和Mixin模式来增强类的功能。代码简洁,易于理解,并且展示了如何在实际应用中使用这些技术。
评论已关闭