首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >TypeScript-混入

TypeScript-混入

原创
作者头像
杨不易呀
发布2023-09-29 22:49:18
发布2023-09-29 22:49:18
2520
举报
文章被收录于专栏:杨不易呀杨不易呀

前言

ypeScript中的混入(Mixins)是一项强大的面向对象编程技术,它允许开发者在类之间共享和复用代码,以创建具有多个不同特征的类的组合。混入实际上是将一个或多个类的成员添加到另一个类中,而不需要继承整个类层次结构。

通过混入,开发者可以轻松地将通用功能模块化,然后将它们组合在不同的类中,从而实现更高级的复杂性和灵活性。这对于避免多重继承的问题非常有用,因为TypeScript不支持多继承。

对象混入

通过 Object.assign 方法进行混入

代码语言:typescript
复制
let obj1 = {name: 'yangbuyiya'};
let obj2 = {age: 34};

Object.assign(obj1, obj2);

console.log(obj1);
console.log(obj2);
image-20211206222527124
image-20211206222527124

类混入

博主假设有这么一个需求: 定义两个类, 将两个类的内容混入到一个新的类中,你看到该需求会不会第一时间想到通过继承的方式来进行实现,那么这个时候就有一个注意点需要你注意一下了,在 TS 当中一次只能继承一个类,不能进行多继承,所以这个时候就可以利用混入来实现该需求,可以通过,Object.getOwnPropertyNames() 方法返回一个由指定对象的所有自身属性的属性名(包括不可枚举属性但不包括Symbol值作为名称的属性)组成的数组,然后在依次赋值即可如下:

代码语言:typescript
复制
class Dog {
    name: string = 'wc';

    say(): void {
        console.log('wang wang');
    }
}

class Cat {
    age: number = 3;

    run(): void {
        console.log('run run');
    }
}

class Animal implements Dog, Cat {
    name: string;
    age: number;
    say: () => void;
    run: () => void;
}

function myMixin(target: any, from: any[]) {
    from.forEach((fromItem) => {
        Object.getOwnPropertyNames(fromItem.prototype).forEach((name) => {
            target.prototype[name] = fromItem.prototype[name];
        })
    })
}

myMixin(Animal, [Dog, Cat]);
let a = new Animal();
console.log(a);
a.say();
a.run();

在类的混入当中,被混入的类当中的属性是不能被继承的可以查看下图即可验证:

image-20211206223741208
image-20211206223741208

最后

本期结束咱们下次再见👋~

🌊 关注我不迷路,如果本篇文章对你有所帮助,或者你有什么疑问,欢迎在评论区留言,我一般看到都会回复的。大家点赞支持一下哟~ 💗

我正在参与2023腾讯技术创作特训营第二期有奖征文,瓜分万元奖池和键盘手表

输入图片说明
输入图片说明

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 对象混入
  • 类混入
  • 最后
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档