针对 (this._callback[evn] || (this._callback[evn] = [])).push(callback);我不是很明白的就是:对事件evn创建数组,除非已经存在了,那么就将回调push进去,为什么数组可以定义成this._callback[evn]谢谢!
闭关修行中......
当this._callback[evn]不存在时其在Boolean表达式中解析为false,那么会去检查或的第二个条件,第二个条件是一个表达式,那么先执行这个表达式,this._callback[evn] = [],创建this._callback[evn]为一个数组,意思很明白了吧。js里面很多这种写法,如果是比较常规的写法:
this._callback[evn]
或
this._callback[evn] = []
if(this.callback[evn] == undefined){ this.callback[evn] = []; } this.callback[evn].push(callback);
这样是不是看起来比较low?
a = {b : 'foo'}; (a.c || (a.c= [])).push('bar'); console.log(a) Object {b: "foo", c: Array[1]}
(this._callback[evn] || (this._callback[evn] = [])).push(callback);
这句等同于:
if (this._callback[evn]) { // 如果this._callback[evn]不为空 this._callback[evn].push(callback); } else { // 先初始化为一个空数组,再往里面push this._callback[evn] = []; this._callback[evn].push(callback); }
这句代码用了短路运算符||,当且仅当前一个表达式不成立时,才会执行后一个表达式。这样就能够在this._callback[evn]为空时先对它进行初始化,从而避免空指针错误。
||
this._callback应该是一个普通对象,而不是数组,事件名称evn则是该对象的属性。
this._callback
evn
当
this._callback[evn]
不存在时其在Boolean表达式中解析为false,那么会去检查或
的第二个条件,第二个条件是一个表达式,那么先执行这个表达式,this._callback[evn] = []
,创建this._callback[evn]为一个数组,意思很明白了吧。js里面很多这种写法,如果是比较常规的写法:这样是不是看起来比较low?
这句等同于:
这句代码用了短路运算符
||
,当且仅当前一个表达式不成立时,才会执行后一个表达式。这样就能够在this._callback[evn]
为空时先对它进行初始化,从而避免空指针错误。this._callback
应该是一个普通对象,而不是数组,事件名称evn
则是该对象的属性。