javascript - this._callback[evn] 数组定义
阿神
阿神 2017-04-10 15:53:05
[JavaScript讨论组]

针对 (this._callback[evn] || (this._callback[evn] = [])).push(callback);我不是很明白的就是:
对事件evn创建数组,除非已经存在了,那么就将回调push进去,为什么数组可以定义成this._callback[evn]
谢谢!

阿神
阿神

闭关修行中......

全部回复(2)
天蓬老师

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]}
伊谢尔伦
(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则是该对象的属性。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号