Typescript 模拟实现 多继承
2024-08-30 09:11:33
class Animal{
eat():void{
alert("animal eat");
}
} class Mamal extends Animal{
breathe() :void{
alert("Mamal breathe");
}
} class WingedAnimal extends Animal {
fly() {
alert("WingedAnimal fly");
}
}
//模仿实现多继承 的函数方法
function applyMixins(derivedCtor:any,baseCtor:any[]) {
//遍历父类中的所有的属性,添加到子类的属性中中
baseCtor.forEach(baseCtor => {
//获取遍历到的父类中的所有属性
Object.getOwnPropertyNames(baseCtor.prototype).forEach(name => {
if (name !== "constructor") {
//父类中的属性,添加到子类的属性中
derivedCtor.prototype[name] = baseCtor.prototype[name];
}
});
});
}
//定义Bat类,
class Bat implements Mamal, WingedAnimal{
fly: () => void;
breathe: () => void;
eat: () => void;//这个属性是访问不到
} applyMixins(Bat, [Mamal, WingedAnimal]);
var bat = new Bat();
bat.fly();
bat.breathe();
bat.eat();//执行无结果,eat是Animal类的
缺点:
1:只能在继承一级的方法和属性
2:如果父类中含有同一种方法或属性,会根据赋值的顺序,先赋值的会被覆盖掉
最新文章
- miniui
- php设计模式 适配器模式
- Shell 脚本 ,, 根据进程号退出 从而关机
- 开源PLM软件Aras详解四 ItemType的概念
- 编写高效的CSS选择符(节选)
- MyQL修改用户名命令、密码
- json数据处理技巧(字段带空格、增加字段)
- 转: 透过CAT,来看分布式实时监控系统的设计与实现
- IOS 第三方开源库记录
- 229. Majority Element II My Submissions Question
- lightoj 1013
- Jquery跨域调用后台方法
- STL笔记之【map之移除元素】
- 实时 Django 终于来了 —— Django Channels 入门指南
- 剑指offer编程题Java实现——替换空格
- oracle传入一个可能为空的参数进行查询
- vs2013中,自定义mvc 添加视图脚手架
- nginx ---refine---按需时间/流量进行调整后台服务器---geocity,proxypass
- 为运行SQL Server的虚拟机切换装有DB Logs的最佳实践
- ES6数组相关