当前位置: 首页 > 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项目
  • 事物(物质)的存在形式:结构与运动、维度空间:结构-空间,运动-时间...
  • 2017届校招提前批面试回顾
  • co.js - 让异步代码同步化
  • CSS 提示工具(Tooltip)
  • java8 Stream Pipelines 浅析
  • jdbc就是这么简单
  • Octave 入门
  • Python_网络编程
  • UEditor初始化失败(实例已存在,但视图未渲染出来,单页化)
  • 纯 javascript 半自动式下滑一定高度,导航栏固定
  • 服务器之间,相同帐号,实现免密钥登录
  • 基于Vue2全家桶的移动端AppDEMO实现
  • 微服务核心架构梳理
  • 小程序上传图片到七牛云(支持多张上传,预览,删除)
  • 写代码的正确姿势
  • 一起来学SpringBoot | 第三篇:SpringBoot日志配置
  • - 转 Ext2.0 form使用实例
  • 摩拜创始人胡玮炜也彻底离开了,共享单车行业还有未来吗? ...
  • ​Distil-Whisper:比Whisper快6倍,体积小50%的语音识别模型
  • (DFS + 剪枝)【洛谷P1731】 [NOI1999] 生日蛋糕
  • (vue)el-checkbox 实现展示区分 label 和 value(展示值与选中获取值需不同)
  • (zz)子曾经曰过:先有司,赦小过,举贤才
  • (笔试题)分解质因式
  • (附源码)spring boot北京冬奥会志愿者报名系统 毕业设计 150947
  • (四)JPA - JQPL 实现增删改查
  • (一)硬件制作--从零开始自制linux掌上电脑(F1C200S) <嵌入式项目>
  • (转)真正的中国天气api接口xml,json(求加精) ...
  • **PHP分步表单提交思路(分页表单提交)
  • .net on S60 ---- Net60 1.1发布 支持VS2008以及新的特性
  • .NET Project Open Day(2011.11.13)
  • .NET 编写一个可以异步等待循环中任何一个部分的 Awaiter
  • .net 获取url的方法
  • .php结尾的域名,【php】php正则截取url中域名后的内容
  • @angular/cli项目构建--http(2)
  • @requestBody写与不写的情况
  • @WebServiceClient注解,wsdlLocation 可配置
  • [ vulhub漏洞复现篇 ] Hadoop-yarn-RPC 未授权访问漏洞复现
  • [ 环境搭建篇 ] 安装 java 环境并配置环境变量(附 JDK1.8 安装包)
  • [.NET]桃源网络硬盘 v7.4
  • [ActionScript][AS3]小小笔记
  • [Android]使用Git将项目提交到GitHub