类中初始化对象时出现ReferenceError: events未定义问题求助
问题分析与解决
错误根源
你在构造函数里直接写 keys = {} 和 events = {},这不是给类的实例属性赋值,而是在尝试操作全局变量。
keys没报错,是因为你的全局作用域里刚好存在同名变量(比如浏览器环境的全局对象上有keys,或是你之前的代码无意间定义过全局keys)。events在全局作用域中不存在,JS引擎找不到这个变量,所以抛出了ReferenceError。
正确代码写法
要给类的实例属性赋值,必须用this关键字指向当前实例:
class Keyboard { keys; events; constructor() { this.keys = {}; this.events = {}; } }
你也可以直接在类的字段声明时初始化,省去构造函数里的赋值步骤:
class Keyboard { keys = {}; events = {}; }
额外说明
JS的作用域规则是:当前作用域找不到变量时,会逐层向上查找。如果到全局作用域还找不到,就会抛出未定义错误。这个问题和赋值顺序完全无关,调换keys和events的顺序,只要全局没有events变量,错误就一定会出现。
内容的提问来源于stack exchange,提问作者Crih.exe
相关产品推荐
相关产品推荐

