第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

【九月打卡】第10天 手寫 EventBus

標(biāo)簽:
JavaScript

课程名称2周刷完100道前端优质面试真题
课程章节:第8章 前端面试技能拼图6: 编写高质量代码 - 正确,完整,清晰,鲁棒
主讲老师双越
课程内容
今天学习的内容包括:
8-16 手写EventBus自定义事件-包括on和once
8-17 手写EventBus自定义事件-on和once分开存储
8-18 手写EventBus自定义事件-单元测试

课程收获

API 操作:

on 同一个key,可绑定多个函数,依次执行。
once 同一个key,可绑定多个函数,依次执行,但只会触发一次。
emit 触发关键字,传参。
off 同一个key,可解绑某个或全部函数。

const e = new EventBus();
e.on('key1', fn2);
e.once('key1', fn3);
e.off('key1', fn1);
e.emit('key1', 10, 20);

API 实现思路:

整体用对象存储,key 对应数组,以执行函数对象 { fn, isOnce } 填充。
on 即往对应 key 数组添加执行函数对象。
once 同上,但要标记 isOnce: true
off 即找出 key 数组内对应函数对象删除或清空整个数组。
emit 找出 key 对应数组依次执行,并 filter isOnce为 true 的,重新赋值对应数组。

    class EventBus {
      constructor() {
        this.events = {};
      }
      emit(type, ...arg) {
        const fnList = this.events[type];
        if (fnList == null) return;
        this.events[type] = fnList.filter((item) => {
          const { fn, isOnce } = item;
          fn(...arg);
          return !isOnce;
        });
      }
      on(type, fn, isOnce = false) {
        const events = this.events;
        if (!events[type]) {
          events[type] = [];
        }
        events[type].push({
          fn,
          isOnce,
        });
      }
      once(type, fn) {
        this.on(type, fn, true);
      }
      off(type, fn) {
        if (fn) {
          const fnList = this.events[type];
          if (fnList && fnList.length) {
            this.events[type] = fnList.filter((item) => item.fn !== fn);
          }
        } else {
          this.events[type] = [];
        }
      }
    }

以上,结束。

點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

若覺得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評(píng)論
  • 收藏
  • 共同學(xué)習(xí),寫下你的評(píng)論
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消