博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
js实现多继承
阅读量:6244 次
发布时间:2019-06-22

本文共 1721 字,大约阅读时间需要 5 分钟。

/*保证typescript可以正确计算类型*/export function extend
(target: Type
, source1: Type
): Type
;export function extend
( target: Type
, source1: Type
, source2: Type
): Type
;export function extend
( target: Type
, source1: Type
, source2: Type
, source3: Type
): Type
;export function extend
( target: Type
, source1: Type
, source2: Type
, source3: Type
, source4: Type
): Type
;/*结束*//*功能*/export function extend(target: Type
, ...sources: Type
[]): Type
{ return extend2(target)(...sources.reverse());}function extend2(target: Type
) { return (...sources: Type
[]): Type
=> { let targetPrototype = target.prototype; // 继承 (function() { // 创建一个干净的实例 function beget() { var F = function() { // sources属性处理 sources.map(source => source.call(this)); }; // sources处理 assign(F.prototype, ...sources.map(source => source.prototype)); return new F(); } let prototype = beget(); prototype.constructor = target; // 继承 target.prototype = prototype; // 原来的方法 assign(target.prototype, targetPrototype); })(); return target as any; };}/*结束*/复制代码

测试

import { expect } from "chai";import { extend } from "./extend";export class A {  title: string = "a";  run() {    return "a";  }}export class B {  title: string = "b";  demo: string = "demo";  add() {    return "b";  }}export class D {  title: string = "d";  console() {    return "d";  }}let C = extend(A, B, D);const c = new C();describe("extend", () => {  it("c.demo", () => {    expect(c.demo).equal("demo");  });  it("c.add", () => {    expect(c.add()).equal("b");  });  it("c.add", () => {    expect(c.run()).equal("a");  });  it("c.add", () => {    expect(c.console()).equal("d");  });});复制代码

转载地址:http://yvpia.baihongyu.com/

你可能感兴趣的文章
前端JS如何获取主域名(根域名)
查看>>
VR技术行业应用前景初探:技术创新定义精彩未来
查看>>
知识产权攻击是从哪冒出来的?
查看>>
宽带服务商设局,美国法律这么治
查看>>
混合IT架构的最佳实践
查看>>
一文详解神经网络 BP 算法原理及 Python 实现
查看>>
高通与联想达成新专利许可协议
查看>>
阿里科学家王刚、吴翰清同时入选MIT2017年度TR35 开创中国互联网企业先河
查看>>
继SDS之后又迎来CDM,存储行业真要变天了?
查看>>
美媒:联想电脑威胁五角大楼网络安全
查看>>
绿色智慧城市|城市增长边界的几个误区
查看>>
美国土安全部发警告:尽快卸载QuickTime for Windows
查看>>
《SEO的艺术(原书第2版)》——3.9 为客户挖掘和直接营销开展SEO
查看>>
运营商造梦“管道+内容”三十载不言放弃
查看>>
《 自动化测试最佳实践:来自全球的经典自动化测试案例解析》一一3.1 本案例研究的背景...
查看>>
哈工大在CoNLL上斩获全球第四,车万翔博士详解背后的技术细节
查看>>
阿里钉钉VS企业微信 谁才是企业级一哥?
查看>>
2015-2020智慧城市物联网市场复合年增长率达23.2%
查看>>
做好数据分析让物联网数据价值最大化
查看>>
OpenStack Days走进北京 主角是用户
查看>>