js自定义事件与nodejs事件

本文介绍了在Web前端和Node.js中创建和处理事件的方法,包括使用Event构造器创建简单事件,利用CustomEvent构造自定义事件并传递参数,以及通过Node.js的events模块实现事件的监听和触发。同时,还探讨了自定义的发布订阅模式,实现了事件的订阅、发布、取消订阅及一次性订阅功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

	// 最简单创建事件的方法,使用Event构造器
	let myEvent = new Event('show');

    // 创建带参数的自定义事件
    let parmEvent = new CustomEvent('showParm',{
        detail:{
            parm:'王清最帅'
        }
    })

    window.addEventListener('showParm',(event)=>{
        console.log('得到的数据:',event.detail.parm)
    },false)        

    window.addEventListener('show',()=>{
        console.log('王清最帅')
    },false)

    // 触发事件
    window.dispatchEvent(parmEvent)

    window.dispatchEvent(myEvent);

	//nodejs事件
	let events = require('events');
	let myEmitter = new events.EventEmitter();
	myEmitter.on('someEvent',(message)=>{
	    console.log(message);
	})
	myEmitter.emit('someEvent','this is node event');
	// 自定义发布订阅模式

	let eventEmitter = {

	    list: {},
	
	    // 订阅
	    on: function (event,fn){
	        let _this = this;
	        (_this.list[event] || (_this.list[event] = [])).push(fn);
	        return _this;
	    },
	
	    // 发布
	    emit: function (...args){
	    
	        let _this = this;
	    
	        let fns = [..._this.list[[].shift.call(args)]];
	    
	        if (!fns || fns.length == 0) {
	            return false;
	        }
	    
	        fns.forEach(fn => {
	            fn.apply(_this, args)
	        });
	        return _this;
	    },
	
	    // 取消
	    off: function(event,fn){
	        let _this = this;
	        let fns = _this.list[event];
	        if (!fns) return false;
	        if (!fn) {
	            fns && (fns.length == 0)
	        } else {
	            fns.forEach( (item,index) => {
	                (item == fn || item.fn == fn ) && fns.splice(index,1);
	            } )
	        }
	        return _this;
	    },
	
	    // 监听一次
	    once: function(event,fn){
	        let _this = this;
	        function on(){
	            _this.off(event, on);
	            fn.apply(_this,arguments);
	        }
	        on.fn = fn;
	        _this.on(event,on);
	        return _this;
	    }
	
	};
	
	
	let f1 = (data)=>{
	    console.log('article',data);
	}
	
	let f2 = (data)=>{
	    console.log('article2',data);
	}
	
	eventEmitter.on('article',f1)
	
	eventEmitter.on('article',f2)
	
	eventEmitter.off('article',f1)
	
	eventEmitter.once('wq',f2)
	
	eventEmitter.emit('wq','测试')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值