第65章(1 / 1)

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

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

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

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

};

};

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

};

};

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

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

(本章完)