为了账号安全,请及时绑定邮箱和手机立即绑定

this._callback[evn] 数组定义

this._callback[evn] 数组定义

森栏 2019-04-19 16:29:34
针对(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]}
                            
查看完整回答
反对 回复 2019-04-19
?
撒科打诨

TA贡献1934条经验 获得超2个赞

(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则是该对象的属性。
                            
查看完整回答
反对 回复 2019-04-19
  • 2 回答
  • 0 关注
  • 559 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信