簡體中文 | 繁體中文

大話設計模式-----第65章


醫世無雙 最強修真狂少 睡在東莞 傾城亂:魅惑紅塵 契婚:腹黑老公要復婚 寶寶相公:娘子,夫君要長大! 愛住不放,寵妻入骨 錯惹古板總裁 以吻封緘,終生為祭 屍帝 異界之搜尋系統 當惡男降臨在身邊 武神至 列仙 新驚魂六計·白牆上的舌頭 唐太宗 激情薔薇 我的青春不負exo 耽美雲上 賺到大牌夫
第65章

大B:“在DOM指令碼程式設計環境中的高階事件模式中,事件監聽器說到底就是一種內建的觀察者。事件處理器(handler)與事件監聽器(listener)並不是一回事。事件處理器說穿了就是一種把事件傳給與其關聯的函式的手段。而且在這種模型中一種事件只能指定一個回撥方法。而在監聽器模式中,一個事件可以與幾個監聽器關聯。每個監聽器都能獨立於其他監聽器而改變。”

小A:“師兄,能不能再細說一下?”

大B:“可以,我舉個例子,你應該就可以明白了。打個比方,對SanFranciscoChronicle這家報社來說,其訂閱者Joe訂沒訂NewYorkTimes都無所謂。同樣,Joe也不在乎Lindsay是否也訂了SanFranciscoChronnicle。每一方都只管處理自己的資料和相關的行為。”

例如,使用事件監聽器,可以讓多個函式響應同一個事件:

//exampleusinglisteners

Varelement=$(‘example’);

Varfn1=function(e){

//handleclick

};

Varfn2=function(e){

//dootherstuffwithclick

};

addEvent(element,‘click’,fn1);

addEvent(element,‘click’,fn2);

但用事件處理器就辦不到:

//exampleusinghandlers

Varelemet=document.getElementById(‘b’);

Varfn1=function(e){

//handleclick

};

Varfn2=function(e){

//dootherstuffwithclick

};

element.onclick=fn1;

element.onclick=fn2;

大B:“在第一個例子中,由於使用的是事件監聽器,所以click事件發生時fn1和fn2都會被呼叫。而第二個例子使用的是事件處理器,其中第二次對onclick賦值的結果是fn1被fn2取代,因此click事件發生時只會呼叫fn2,不會呼叫fn1。監聽器和觀察者之間的共同之處顯而易見。實際上它們互為同義語。它們都訂閱特定的事件,然後等待事件的發生。事件發生時,訂閱方的回撥函式會得到通知。傳給它們的引數是一個事件物件,其中包含著事件發生時間、事件型別和事件發源地等有用的資訊。”

小A:“這樣我就明白了。”

推薦小說