eventEmitter總結(jié)

源碼鏈接

筆記一共分三部分 :
1、思路總結(jié) 2、知識點總結(jié) 3、代碼規(guī)范總結(jié)

eventEmitter是一個對事件進行監(jiān)聽的對象,說白了就是為事件寫回調(diào)函數(shù),當觸發(fā)一個事件執(zhí)行后,會執(zhí)行為該事件綁定的回調(diào)函數(shù)。

  • 思路總結(jié)
  • 新建eventEmitter對象
    var EventEmitter = function() {this._events = {}}
  • 為原型添加方法
    • EventEmitter.prototype.on(eventName , fn ):為事件綁定回調(diào),返回值為this,方便鏈式操作。
    • EventEmitter.prototype.off(eventName , fn):為事件刪除回調(diào),需要判斷參數(shù)中是否有fn 有則刪除該函數(shù) ,沒有則清空該對象。
    • EventEmitter.prototype.emitter:觸發(fā)事件,如果沒有禁止冒泡則需要由最外層向最內(nèi)層冒泡觸發(fā)。
      EventEmitter.prototype.once:為事件綁定觸發(fā),需要定義一個臨時的函數(shù),這個臨時的函數(shù)執(zhí)行需要off掉之前綁定的,然后再觸發(fā)fn(e).
  • 添加私有對象與方法
  • Ev分別定義了兩個方法與兩個屬性,Ev.prototype.stopPropagation(),Ev.prototype.stopSibling
  • getName(eventName , obj )這兩個方法來修改this.stopP 與this.stopS這兩個屬性。
    是用來獲得用戶傳入的事件名參數(shù),當為空或者格式有問題會拋出錯誤,當事件名含有.則需要進行對其命名空間的檢查,則需要使用checkIn()函數(shù)。
  • checkIn(eventName , obj )
    是用來判斷eventname是否在obj中,obj是對象則判斷eventname是否為該對象的屬性名,obj如果為數(shù)組,則判斷eventname是否存在在該數(shù)組中。
  • getInObj(eventName , _events)
    這個函數(shù)的作用很大,當傳入eventName為字符串時,返回一個對象,該對象會包含eventName對應(yīng)的上級對象,以及最后以及的對象名。同時,如果eventname沒有對應(yīng)的對象則會為他生成空對象 ,這樣簡化了.on()的操作。
  • excute()
    這個函數(shù)是回調(diào)函數(shù)的執(zhí)行函數(shù),里面有一個小地方需要注意,就是對于一次性執(zhí)行后刪除的回調(diào)函數(shù)執(zhí)行完后 ,函數(shù)總數(shù)會減少,所以需要判斷前后兩次['']數(shù)組的長度。執(zhí)行過程中 還需要判斷事件參數(shù)e的兩個屬性,如果e.stopS則直接終斷,該函數(shù)返回e.stopP的結(jié)果。

  • 知識點總結(jié)
  • /^\w+(\.?\w+)*$/.test(eventname)使用正則對事件名進行檢查
    []是對多選一的情況進行組合 ,所以如果只有一種情況就不要放在[]里啦。。
  • throw Error()拋出錯誤的辦法
  • Array.isArray()數(shù)組的原生方法 ,用來判斷該對象是否是數(shù)組,而不用使用 obj instanceof Array。
  • &&操作符的使用 !a && (a = 1)如果a不存在 ,則為a賦值,后面的語句需要加上()才會執(zhí)行
  • .slice()方法
    當沒有傳任何參數(shù)的時候代表對數(shù)組或字符串的深度復(fù)制。
    >>[1,2,3,4].slice(1,3);<<[2, 3]
    >>[1,2,3,4].slice(1);<<[2, 3, 4]
    >>[1,2,3,4].slice(-1);<<[4]
    >>[1,2,3,4].slice(-3,-1);<<[2,3]
    這個 方法并不會改變原數(shù)組。
  • .lastIndexOf()方法 區(qū)別indexOf() 從左至右檢索 ,他是從右至左,但是索引值依舊是左邊第一個為0。
  • splice
    這個方法可以實現(xiàn)對數(shù)組的刪除 替換 插入。第一個參數(shù)表示起始索引,第二個參數(shù)表示刪除的位數(shù)。第三個及以后表示要補上的參數(shù)
  • bind()這個為函數(shù)綁定作用域的辦法,并不會對函數(shù)本身改變,而是返回改變了作用域的函數(shù)。

  • 代碼規(guī)范總結(jié)
  • 當函數(shù)名定義為getName()時,則返回值需要返回name ,而最好不要返回布爾值。
  • 函數(shù)如果有必須得參數(shù),需要判斷該參數(shù)是否存在!
  • 判斷某個值是否在數(shù)組 或某個屬性是否在某個對象里 可以合并寫在一個方法里。
  • 盡量不需要寫分號,function(){};(function(){})() 這個地方需要寫分號。
  • 需要加空格的地方
    if ( !i ) {
    運算符兩邊
    function() {}
    function test() {}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • <a name='html'>HTML</a> Doctype作用?標準模式與兼容模式各有什么區(qū)別? (1)、<...
    clark124閱讀 3,814評論 1 19
  • 關(guān)于朋友,我實在沒有資格提起,因為我不是一個合格的朋友,因為我并不理解朋友的概念,因為我從不曾真正的擁有朋友.. ...
    句夕夕閱讀 304評論 0 1
  • 每天上班都要經(jīng)一個小橋洞。一大早就開始熙熙攘攘,有的時候會有一位銀發(fā)老奶奶擺上兩個大大的泛黃的泡沫盒子坐在離橋洞不...
    smile夢彥賢嫻閱讀 271評論 0 2
  • 又是一個失眠夜。隔壁的燈光投過縫隙貼在墻上,我聽著歌又把自己縮起來。 曾經(jīng)看過一篇文章說晚上不要做任何決定??晌胰?..
    輕步緩行于己路閱讀 137評論 0 0
  • 現(xiàn)代教育體制教給我們的,可能更多的是利己主義,如何去保障自己的利益最大化,如何通過技術(shù)手段,技術(shù)革命去使我們的物...
    行而知fgl閱讀 510評論 0 0

友情鏈接更多精彩內(nèi)容