javascript - 一个对象的一个类,它从同一对象的两个其他类接收数据
问题描述
我想创建一个对象,其中该类使用同一对象的其他两个类的数据。
const MatchReplace = {
Username: {
RegExp: new RegExp('%USERNAME%', 'g'), // Joined user name
Value: 'DareFox'
},
UserWithTag: {
RegExp: new RegExp('%USERWITHTAG%', 'g'), // User#XXXX
Value: 'DareFox#0100'
},
ServerName: {
RegExp: new RegExp('%SERVERNAME%', 'g'), // Name of this server
Value: 'StackOverflow'
},
MemberCount: {
RegExp: new RegExp('%MEMBERCOUNT%', 'g'), // Member count (human & bots)
Value: '1005'
},
HumanCount: {
RegExp: new RegExp('%HUMANCOUNT%', 'g'), // Only human count
Value: '1000'
},
BotCount: {
RegExp: new RegExp('%BOTCOUNT%', 'g'), // Only bot count
Value: MatchReplace.MemberCount.Value - MatchReplace.HumanCount.Value // Expected: 5
}
}
但我收到一个错误:
Value: MatchReplace.MemberCount.Value - MatchReplace.HumanCount.Value
^
ReferenceError: Cannot access 'MatchReplace' before initialization
为什么这不起作用以及如何使它起作用?
解决方案
它不起作用,因为当您创建对象时,JS 会初始化每个属性,并且由于对象尚未初始化并且您在其属性之一中有对它的引用,因此无法完成。
您可以通过三种方式进行:
- 在对象之前定义值。
- 初始化对象,然后以正确的顺序一一分配其属性。
- 使用函数或 getter 定义值:
const matchReplace = {
//...
BotCount: {
RegExp: new RegExp('%BOTCOUNT%', 'g'), // Only bot count
get Value() {return MatchReplace.MemberCount.Value - MatchReplace.HumanCount.Value; } // Expected: 5
}
}
推荐阅读
- linux - 如何在 WSO2 中指定日志创建 http_access 的时间?
- apache-spark - spark解释器读取hive metastore超时
- javascript - 尝试使用 JavaScript 在文本文件中保存表单数据时,HTML 输入所需属性不起作用
- r - 当矢量化函数调用另一个函数时,R 中的 Foreach 不起作用
- python - 为深度学习增强时间序列数据
- postgresql - 使用 jsonb 字段的 PostgreSQL 快速搜索
- go - 启动 VScode Go 代码时访问被拒绝,既不调试又不调试
- asp.net - 成功创建 HTTP Post 记录后,我没有从请求中收到新创建的记录值。为什么?
- python - src/gevent/libev/corecext.c:95:20:致命错误:Python.h 错误:命令“gcc”失败,退出状态为 1
- python - Python从它自己的模块/包导入?