实现思路
- 首先定义基础类
Animal
,包含 name
属性和 sayName
方法。
- 然后创建一个
mixin
函数,该函数接收一个目标类作为参数,并返回一个新的类,这个新类会将 run
方法混入到目标类中。
- 最后使用这个
mixin
函数将 run
方法混入到 Animal
类。
代码示例
// 基础类 Animal
class Animal {
name: string;
constructor(name: string) {
this.name = name;
}
sayName() {
console.log(`My name is ${this.name}`);
}
}
// Mixin 函数
function addRunMixin<T extends new (...args: any[]) => any>(Base: T) {
return class extends Base {
run() {
console.log(`${this.name} is running`);
}
};
}
// 使用 Mixin 将 run 方法混入到 Animal 类
const AnimalWithRun = addRunMixin(Animal);
const myAnimal = new AnimalWithRun('Tom');
myAnimal.sayName();
myAnimal.run();