假設(shè)員工A負(fù)責(zé)預(yù)加載資源模塊的開發(fā)(loadSource),任何模塊都要在資源加載完畢后才可以執(zhí)行。
員工B負(fù)責(zé)地圖模塊的開發(fā)(initMap);
loadSource(sourcArr, function() {
initMap();
});
一切都跟按計(jì)劃的一樣完美,忽然有一天需要增加一個(gè)聲音模塊(initSound), 不巧的是負(fù)責(zé)loadSource模塊的人出去旅游了。 員工C又是個(gè)新來的,對(duì)loadSource模塊不熟,生怕把別人的代碼搞壞了。
這個(gè)時(shí)候我們可以用"觀察者模式"重寫loadSource模塊,向外部暴露一個(gè)loaded事件。
loadSource(sourceArr, function() {
loadSource.emmit('loaded');
});
于是 員工C就可以拿著員工A暴露給他的事件,注冊(cè)自己的initSound方法
loadSource.bind('loaded', function() {
initSound();
});
員工B則加一段
loadSource.bind('loaded', function() {
initMap();
});
而員工A現(xiàn)在只需要關(guān)注資源是否加載完畢,而不用去關(guān)心資源加載完畢后需要調(diào)哪些模塊。
完美~~
自娛自樂
文章._list = []; //注冊(cè)列表
//報(bào)社
文章.bind("出軌", function() { //文章._list = [ 寫八卦<function>]
//寫八卦
});
//狗仔隊(duì)
文章.bind("出軌", function() { //文章._list = [ 寫八卦<function>, 偷拍<function>]
//偷拍
});
//文章本人
文章.bind("出軌", function() { //文章._list = [ 寫八卦<function>, 偷拍<function>, 辟謠<function>]
//辟謠
});
//馬伊俐的粉絲
文章.bind("出軌", function() {
// 痛斥小三
});
//文章的粉絲
文章.bind("出軌", function() {
// 力挺偶像
});
//還有很多路人甲乙丙丁,都可以注冊(cè)文章的出軌事件
//文章._list = [ fn, fn, fn ... fn] //就會(huì)有很多很多的事件
//文章.emit("出軌"); //一旦"出軌“,注冊(cè)過的事件都會(huì)爆發(fā)。。。 好可怕~~