面试题

function Event() {
  this._events = {};
}
// 绑定事件方法
Event.prototype.on = function (eventType, callback) {
  // 如果事件不存在
  if (!this._events[eventType]) {
    // 创建事件存起来,值为空数组
    this._events[eventType] = [];
  }
  // 将事件回调函数添加进去
  this._events[eventType].push(callback);
};
// 解绑事件方法
Event.prototype.off = function (eventType, callback) {
  this._events[eventType] = this._events[eventType].filter((item) => item !== callback); //将返回的数组接住起到删除的作用
};
// 触发事件方法
Event.prototype.emit = function (eventType, data) {
  this._events[eventType].forEach((callback) => callback(data));
};
// 绑定一次性事件方法
Event.prototype.once = function (eventType, callback) {
  const that = this;
  // 如果事件不存在
  if (!this._events[eventType]) {
    // 创建事件存起来,值为空数组
    this._events[eventType] = [];
  }
  const newFn = function () {
    // 调用一次
    callback();
    // 解绑事件
    that.off(eventType, newFn);
  };
  // 将事件回调函数添加进去
  this._events[eventType].push(newFn);
};
const event = new Event();
event.once('click', function () {
  console.log(111);
});
event.on('click', function () {
  console.log(222);
});
const callback = function () {
  console.log(333);
};
event.on('click', callback);
event.emit('click');
event.off('click', callback);
event.emit('click');
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 自媒体捞钱的模式看似多样化,其实本质的套路依旧是围绕着“卖”字展开的: 卖广告/流量 卖产品 卖服务 卖人脉 而今...
    time刚刚好阅读 14,090评论 34 438
  • 一个女人。 默默地做事。 她是淌过男人河的女人。 她是厌倦了爱情,厌倦了男人。 她开始为自己而活,每天打扮得漂漂亮...
    水星1975阅读 1,459评论 0 2
  • 话说我住在嵩山脚下,古时四大书院之一的嵩阳书院就在这里。有次带着儿子去感受一下历史吧。有一个展览室,里面的照片是...
    愚人传说阅读 1,504评论 0 2
  • 一、大致思路 只统计主要人物的词云,并显示出人物出场次数最多的前10位和对应次数 主要人物宁国府:贾珍、尤氏(珍大...
    小伙在杭州阅读 8,566评论 1 2

友情链接更多精彩内容