javascript - 请问如何理解var handles = this._handles中的_handles
PHP中文网
PHP中文网 2017-04-11 12:50:05
[JavaScript讨论组]

麻烦问一下,我在学习组件,有一段代码看不太懂,定义handles用var handles没问题,但是突然多出来的_handles该怎么理解?按照自己之前的固有印象_handles是私有变量,但是明显之前没有定义,为什么可以这么用呢。谢谢各位大神!

var emitter = {
// 注册事件
on: function(event, fn) {
var handles = this._handles || (this._handles = {}),
calls = handles[event] || (handles[event] = []);

// 找到对应名字的栈(据说是列表)
calls.push(fn);

return this;
},
PHP中文网
PHP中文网

认证高级PHP讲师

全部回复(1)
迷茫

先解释一些代码的意思

var handles = this._handles || (this._handles = {})

这里on方法没有主动用其他对象去掉用(call,apply)的话,this代表emitter,this._handles表示在this/emitter中找_handles属性。与声明变量和赋值,如”var a = a || 1;“不同,取对象中的属性不是变量不需要先声明定义。
在js中,this._handles || (this._handles = {})表示this._handles运算值为false(false, 0, null, undefined)时执行(this._handles = {})。
从逻辑语义上看,当this下_handles属性没有初始化或赋有效值的时候就用{}初始化。
至于是否是私有变量看你怎么用,“_”开头表示私有变量的方式只是一种约定,有很多方式实现私有变量(闭包等)。

附(全局window):

a = 1; // 这个赋值(相当于window.a = 1,这是规范里处理全局变量对象[VO]的方式)而
a = a || 1; //报错 这里等号后面的a是未定义的(这里先执行等号后面的,恩,a此时确实未定义),而
a = window.a || 1; //正确 

不要问为什么 规范就这么定义的 a = a || 1; 不相当于 a = window.a || 1;

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

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