美文网首页
ES6 抽象类示例 以及输入输出类型限制

ES6 抽象类示例 以及输入输出类型限制

作者: 章文顺 | 来源:发表于2019-10-21 11:25 被阅读0次

以下代码主要是实现一个es6抽象类示例,其中包括了AOP切面编程,以及输入输出类型限制。根据该实例,可以很快实现一组策略。
若有更好的方法,请在下方留言讨论,谢谢。

// 输出类型
class Res {
  constructor(isSuccess, msg) {
    this.isSuccess = isSuccess
    this.msg = msg
  }
}

// 输入类型
class InputParams {
  constructor(flag, data) {
    this.flag = flag
    this.data = data
  }
}

// 抽象类
class MsgHandler {
  constructor(params, callback) {
    if (new.target === MsgHandler) {
      // 抽象类不可以直接实例化
      throw new Error('MsgHandler class can`t instantiate')
    }
    if (new.target !== MsgHandler) {
      if (!new.target.prototype.hasOwnProperty('handler')) {
        // 判断子实例是否重新handler方法
        throw new Error('please overwrite handler method')
      }
    }
    if (!(params instanceof InputParams)) {
      // 限制构造函数第一个参数输入类型为InputParams
      throw new Error('The type of the first parameter of the constructor is not InputParams')
    }
    this.params = params
    this.callback = this.callbackProcess(callback)
  }

  handler() { }

  // 回调函数前置切面(AOP编程思想)
  callbackProcess(callback) {
    if (typeof callback !== 'function') { return function () { } }
    return function (...args) {
      if (args.length === 0) {
        args = [new Res(true, {})]
      } else if (!(args[0] instanceof Res)) {
        // 限制回调输出参数类型为Res类
        throw new Error('arguments first parameters type is not Res')
      }
      return callback.apply(this, args)
    }
  }
}

// 继承抽象类
class ShowPopupHandler extends MsgHandler {
  constructor(params, callback) {
    super(params, callback)
  }

  // 重写抽象类方法
  handler() {
    console.log('handler showPopup')
    console.log(this.params)
    this.callback()
  }
}

const m = new ShowPopupHandler(new InputParams('abc', { a: 1 }), function (res) {
  console.log(res)
})

m.handler()

博客迁移新地址:点击前往

大前端知识库收集分享 www.190tech.site 壹玖零Tech
搜罗各种前后端奇淫技巧,花式编程思想,日日更新,速来围观吧...

相关文章

  • ES6 抽象类示例 以及输入输出类型限制

    以下代码主要是实现一个es6抽象类示例,其中包括了AOP切面编程,以及输入输出类型限制。根据该实例,可以很快实现一...

  • ES6实战:如何使用Proxy

    ES6实战:如何使用Proxy引言代理捕获类型代理示例1: 监控代理示例2:双向绑定未来示例代理支持 译者注 ES...

  • 二次封装axios工具类ES6

    内容概要使用es6的class对axios进行二次封装,有使用TS限制类型,但99%是js语法。把参数的类型限制移...

  • 抽象类

    1.抽象类仅提供一个类型的部分实现。抽象类可以有实例变量,以及一个或多个构造方法。抽象类可以同时具有抽象方法和具体...

  • 面向对象程序(三)

    1. 抽象类 实例 描述:定义一个抽象类Shape,具有受保护类型的x和y属性,以及公有的抽象方法获得面积。...

  • 面向对象第三篇

    一、抽象类 实例: 描述:定义一个抽象类Shape,具有受保护类型的x和y属性,以及公有的抽象方法获得面积。Rec...

  • 面向对象第三篇

    一:抽象类实例描述:定义一个抽象类Shape,具有受保护类型的x和y属性,以及公有的抽象方法获得面积。Rectan...

  • 面向对象(三)

    抽象类 一.实例 描述: 定义一个抽象类Shape,具有受保护类型的x和y属性,以及公有的抽象方法获得面积。Rec...

  • 面向对象具体应用

    1、抽象类 1.1实例 描述:定义一个抽象类Shape,具有受保护类型的x和y属性,以及公有的抽象方法获得面积。R...

  • TypeScript 入门教程—原始数据类型

    JavaScript 的原始数据类型:布尔值、数值、字符串、null、undefined 以及 ES6 中的新类型...

网友评论

      本文标题:ES6 抽象类示例 以及输入输出类型限制

      本文链接:https://www.haomeiwen.com/subject/agttvctx.html