原生js,编写一个自定义的事件监听

前几天一哥们,去面试遇到到一个用原生js 编写的事件监听,

原题是这样子滴!

function EventDispatcher()
{
}
 
/**
 * @param {string} eventStr
 * @param {Function} callBack
 * */
EventDispatcher.prototype.addEventListener = function(eventStr, callBack)
{
};
 
/**
 * @param {string} event
 * @param {*=} body
 * */
EventDispatcher.prototype.dispatchEvent = function(event, body)
{
};
 
var d = new EventDispatcher();
function callback(e) {
console.log(‘callback fired’);
console.log(‘Event body: ’+e.body);
}
d.addEventListener(‘testEvent’, callback);
d.dispatchEvent(‘testEvent’, ‘testMessage’);

//expexted console output:
//callback fired
//Event body: testMessage

---------------分割线------------------

然后~~~就兴致勃勃的去看一下,大神的可以直接忽略,

就希望帮到一小部分的人~~就很开心啦!

简单原理就是往addEventListener 里面的type挂载一个函数,然后在dispatchEvent里面调用这个函数,这么一说是不是觉得很简单???

好 直接上代码!!!

function EventDispatcher() {
    this.events = {};
}
            
EventDispatcher.prototype.addEventListener = function(type, handler) {
    if (typeof handler != 'function') return;
    this.events[type] = handler;
};
            
EventDispatcher.prototype.dispatchEvent = function(type, body) {
    var e = {};
    e.body = body;
    this.events[type](e);
};
            
var d = new EventDispatcher();
            
d.addEventListener('testEvent', function(e){
    console.log('callback fired-----' + e.body);
});
            
d.dispatchEvent('testEvent', '213123123');

完毕 收工(总觉得有点像订阅发布的意思2333)~~

很无耻的凑字数~~~很无耻的凑字数~~~很无耻的凑字数~~~很无耻的凑字数~~~很无耻的凑字数~~~很无耻的凑字数~~~很无耻的凑字数~~~很无耻的凑字数~~~

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值