筆記一共分三部分 :
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() {}