假设员工A负责预加载资源模块的开发(loadSource),任何模块都要在资源加载完毕后才可以执行。
员工B负责地图模块的开发(initMap);
loadSource(sourcArr, function() {
initMap();
});
一切都跟按计划的一样完美,忽然有一天需要增加一个声音模块(initSound), 不巧的是负责loadSource模块的人出去旅游了。 员工C又是个新来的,对loadSource模块不熟,生怕把别人的代码搞坏了。
这个时候我们可以用"观察者模式"重写loadSource模块,向外部暴露一个loaded事件。
loadSource(sourceArr, function() {
loadSource.emmit('loaded');
});
于是 员工C就可以拿着员工A暴露给他的事件,注册自己的initSound方法
loadSource.bind('loaded', function() {
initSound();
});
员工B则加一段
loadSource.bind('loaded', function() {
initMap();
});
而员工A现在只需要关注资源是否加载完毕,而不用去关心资源加载完毕后需要调哪些模块。
完美~~
自娱自乐
文章._list = []; //注册列表
//报社
文章.bind("出轨", function() { //文章._list = [ 写八卦<function>]
//写八卦
});
//狗仔队
文章.bind("出轨", function() { //文章._list = [ 写八卦<function>, 偷拍<function>]
//偷拍
});
//文章本人
文章.bind("出轨", function() { //文章._list = [ 写八卦<function>, 偷拍<function>, 辟谣<function>]
//辟谣
});
//马伊俐的粉丝
文章.bind("出轨", function() {
// 痛斥小三
});
//文章的粉丝
文章.bind("出轨", function() {
// 力挺偶像
});
//还有很多路人甲乙丙丁,都可以注册文章的出轨事件
//文章._list = [ fn, fn, fn ... fn] //就会有很多很多的事件
//文章.emit("出轨"); //一旦"出轨“,注册过的事件都会爆发。。。 好可怕~~
网友评论