• js 发布订阅模式


    //发布订阅模式
    class EventEmiter{
        constructor(){
            //维护一个对象
            this._events={
    
            }
        }
        on(eventName,callback){
            if( this._events[eventName]){
                //如果有就放一个新的
                this._events[eventName].push(callback);
            }else{
                //如果没有就创建一个数组
                this._events[eventName]=[callback]
            }
        }
        emit(eventName,...rest){
            if(this._events[eventName]){ //循环一次执行
                this._events[eventName].forEach((item)=>{
                    item.apply(this,rest)
                });
            }
        }
        removeListener(eventName,callback){
            if(this._events[eventName]){
                //当前数组和传递过来的callback相等则移除掉
                this._events[eventName]=
                    this._events[eventName].filter(item=>item!==callback);
            }
        }
        once(eventName,callback){
            function one(){
                //在one函数运行原来的函数,只有将one清空
                callback.apply(this,arguments);
                //先绑定 执行后再删除
                this.removeListener(eventName,one);
            }
            this.on(eventName,one);
                //此时emit触发会执行此函数,会给这个函数传递rest参数
        }
    }
    class Man extends EventEmiter{}
    let man=new Man()
    function findGirl() {
        console.log('找新的女朋友')
    }
    function saveMoney() {
        console.log('省钱')
    }
    man.once('失恋',findGirl);
    //man.on('失恋',findGirl) //失恋 ,绑定一个函数方法
    man.on('失恋',saveMoney)//失恋 ,绑定一个函数方法
    man.removeListener('失恋',saveMoney); //移除一个函数方法
    man.emit('失恋');
    //绑定一次,触发多次,也只执行一次。触发后一次将数组中的哪一项删除掉下次触发就不会执行
  • 相关阅读:
    虚拟机vmware的连接方式以及IP端口,协议等概念
    python3爬虫--shell命令的使用和firefox firebug获取目标信息的xpath
    numpy的基本用法
    scrapy模拟请求头
    (1)python Scrapy爬虫框架
    flutter ui
    dart 类
    dart 基础
    黑苹果镜像下载地址
    android9.0请求异常
  • 原文地址:https://www.cnblogs.com/null11/p/7498820.html
Copyright © 2020-2023  润新知