订阅发布这段是代码的作者的原本想法到底是啥?
2015-04-01
第二章订阅和发布
publish: function () {
...
// 如果不存在_callbacks 方法返回
if(!(this._calls = this._callbacks )) return this;
//如果不包含事件对应的数组
if(!(this._calls = this._callbacks[ev])) return this;
...
}
这个地方我觉得有个很严重的错误
因为在上部分subscribe (不在这里贴可在书中查看)方法中 _callbacks 方法不存在,在会被指定为{} 。
所以subscribe 这个方法哪怕只执行一次, 第一个if 永远都是返回true (比如subscribe 中根本没声明过的 “no.func”方法,subscribe 只要之前执行subscribe("yes.func",function() { 这里是yes方法 })过,publish("no.func") 执行时都不会被正确的return 出来)
第二个if 也有问题 因为上部分的subscribe 方法中 _callbacks[ev] 永远都被赋值成一个数组,在callback 方法未传入的时候。
数组会被推入一个undefined,
那么到 !(this._calls = this._callbacks[ev])这里 相当于 !(this._calls = [undefined]) 也相当于 !([]) 这个判断也是只要sub方法执行过,永远为false 了
完全打不到判断的预期啊?