针对(this._callback[evn]||(this._callback[evn]=[])).push(callback);我不是很明白的就是:对事件evn创建数组,除非已经存在了,那么就将回调push进去,为什么数组可以定义成this._callback[evn]谢谢!
2 回答
叮当猫咪
TA贡献1776条经验 获得超12个赞
当this._callback[evn]不存在时其在Boolean表达式中解析为false,那么会去检查或的第二个条件,第二个条件是一个表达式,那么先执行这个表达式,this._callback[evn]=[],创建this._callback[evn]为一个数组,意思很明白了吧。js里面很多这种写法,如果是比较常规的写法: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]}
撒科打诨
TA贡献1934条经验 获得超2个赞
(this._callback[evn]||(this._callback[evn]=[])).push(callback);这句等同于:if(this._callback[evn]){//如果this._callback[evn]不为空this._callback[evn].push(callback);}else{//先初始化为一个空数组,再往里面pushthis._callback[evn]=[];this._callback[evn].push(callback);}这句代码用了短路运算符||,当且仅当前一个表达式不成立时,才会执行后一个表达式。这样就能够在this._callback[evn]为空时先对它进行初始化,从而避免空指针错误。this._callback应该是一个普通对象,而不是数组,事件名称evn则是该对象的属性。
添加回答
举报
0/150
提交
取消