麻烦问一下,我在学习组件,有一段代码看不太懂,定义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;
},
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
先解释一些代码的意思
这里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 = a || 1; 不相当于 a = window.a || 1;