当前位置: 首页 > news >正文

自己简单写的 事件订阅机制

我写的 简易的事件订触发。

    export  const Event = function () {
       // 类型
       this.typeList = {}
    }
    Event.prototype.on = function ({type, fn}){
        if (this.typeList.hasOwnProperty(type)) {
            this.typeList[type].push(fn)
        } else {
            this.typeList[type] = []
            this.typeList[type].push(fn)
        }
    }
    Event.prototype.off = function({type, fn})  {
       if (this.typeList.hasOwnProperty(type)) {
             let list = this.typeList[type]
          let index = list.indexOf(fn)
          if (index !== -1 ) {
                 list.splice(index, 1)
          }
          
       } else {
            console.warn('not has this type')
       }
    }
    Event.prototype.once = function ({type, fn}) {
       const fixFn = (value) => {
            fn.call(this, value)
            this.off({type, fn: fixFn})
       }
       this.on({type, fn: fixFn})
    }
    Event.prototype.trigger = function (type, value, context){
        context = context ? context : null    
        if (this.typeList.hasOwnProperty(type)) {
            this.typeList[type].forEach(fn => {
                fn.call(context, value)
            })
        }
    }

相关文章:

  • ReactNative从零到完整项目-state使用详解
  • 150行实现Promise 90%的功能
  • PlaNet图片识别机器,准确表现超过人类
  • 精选15个国外CSS框架
  • python基础—条件语句
  • 【391天】每日项目总结系列128(2018.03.03)
  • 有货移动Web端性能优化探索实践
  • 修复.NET的HttpClient
  • 51nod1683
  • KPN iTV的敏捷转型之旅
  • 设计模式之禅之单例模式!
  • 纠纷判决已出,法官要求Uber归还所有Waymo自动驾驶机密文件
  • 10个最新交互式Web设计实例欣赏
  • VSCode建立.net core项目
  • 事物(物质)的存在形式:结构与运动、维度空间:结构-空间,运动-时间...
  • 【笔记】你不知道的JS读书笔记——Promise
  • Android组件 - 收藏集 - 掘金
  • java取消线程实例
  • js中的正则表达式入门
  • leetcode388. Longest Absolute File Path
  • PAT A1017 优先队列
  • React Transition Group -- Transition 组件
  • Vue 重置组件到初始状态
  • vue+element后台管理系统,从后端获取路由表,并正常渲染
  • 如何在GitHub上创建个人博客
  • 手机端车牌号码键盘的vue组件
  • 推荐一个React的管理后台框架
  • 小程序开发之路(一)
  • 一文看透浏览器架构
  • Java数据解析之JSON
  • mysql面试题分组并合并列
  • "无招胜有招"nbsp;史上最全的互…
  • #常见电池型号介绍 常见电池尺寸是多少【详解】
  • #基础#使用Jupyter进行Notebook的转换 .ipynb文件导出为.md文件
  • $(function(){})与(function($){....})(jQuery)的区别
  • %3cli%3e连接html页面,html+canvas实现屏幕截取
  • (01)ORB-SLAM2源码无死角解析-(66) BA优化(g2o)→闭环线程:Optimizer::GlobalBundleAdjustemnt→全局优化
  • (1)(1.13) SiK无线电高级配置(五)
  • (9)目标检测_SSD的原理
  • (PHP)设置修改 Apache 文件根目录 (Document Root)(转帖)
  • (附源码)计算机毕业设计大学生兼职系统
  • (四)Linux Shell编程——输入输出重定向
  • (四)图像的%2线性拉伸
  • (一)使用IDEA创建Maven项目和Maven使用入门(配图详解)
  • .bat批处理(三):变量声明、设置、拼接、截取
  • .gitignore文件_Git:.gitignore
  • .net core 微服务_.NET Core 3.0中用 Code-First 方式创建 gRPC 服务与客户端
  • .Net Core和.Net Standard直观理解
  • .NET Framework .NET Core与 .NET 的区别
  • .NET 中让 Task 支持带超时的异步等待
  • .NET 中什么样的类是可使用 await 异步等待的?
  • .NET/C# 的字符串暂存池
  • .NET关于 跳过SSL中遇到的问题
  • .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验
  • /dev/VolGroup00/LogVol00:unexpected inconsistency;run fsck manually