TypeScript彻底解读(26课时)_18.Mixins混入


本节的代码在mixin.ts文件内

同时在index.ts内引入

混入就是把两个对象或者类的内容混合到一块儿,从而实现一些功能复用。es6

对象混入

js中对象的混入

先来看一个js中对象的混入的例子

首先定义一个对象a
在定义一个对象b
a里面混入一个对象b让a里面有对象b的属性
使用es6的Object.assign方法,a写在前面,b写在后面

a里面就也有了b对象的属性

b仍是只有b属性
数组

ts中对象混入

在ts中,是具备类型系统的

AB如今就是一个交叉类型,这是ts自动帮你推断出来的

固然你也能够指定它的类型是ObjectA和ObjectB的交叉类型,交叉类型就表示它既包含A的特性,又包含B的特性。函数

类的混入

看下js中类的混入

定义类A和B,输出类A和类B,分别有funcA和funcB

Object.getOwnPropertyNames()能够获取对象自身的属性,除去他继承来的属性,
对它全部的属性遍历,它是一个数组,遍历一下它全部的属性名
 
base原型对象上,添加到遍历的属性

调用mixins2,把两个原型对象传进去
b.pertotype就是b的原型对象
a.pertotype就是a的原型对象
调用了mixins2这个方法,传进去b的原型对象和a的原型对象

建立b的实例,并输出这个b,发现里面既有funcA也有funcB

调用b.funcA() 打印出了here

这就是js中对类的混入3d

ts中对类的混入

ts中还要处理对类型的定义
把两个类当作接口来继承,AB继承classAa和ClassBb,继承多个接口用逗号分隔开

继承了两个类之后,这里要把两个类里面的全部属性和方法都要在这里定义一下

定义一个函数mixins,从from里面forEach遍历一下,由于传入进来是一个数组,它是要混入的两个类组成的数组,要遍历它

经过Object.getOwnPropertyNames获取当前遍历的原型对象,获取它原型对象上定义的全部属性,返回的也是一个数组
也须要遍历他

给base添加当前遍历的这个原型对象上的属性

调用混入的方法

建立classAB的实例,并输出,输出的funcA和funcB是有实际的函数体的

classAB这里只须要定义函数的类型就能够,实际的方法体是从ClassAa和ClassBb里面继承过来的

能够看到下划线proto下划线这个下面有继承来的两个方法funcA和funcB


经过mixins函数,将这个ClassAa和ClassBb原型对象的属性和方法赋给ClassAB
由于ClassAa和ClassBb有函数funcA和funcB的类型定义,因此能够吧funcA和funcB的函数实体直接赋给ClassAB,这个就是ts中的混入



 对象

相关文章
相关标签/搜索