javascript - 在 JavaScript 对象中正确使用“this”
问题描述
在下面的示例中,我如何访问enums.ROCK
道具内部?按照目前的情况,我得到一个错误Uncaught TypeError: Cannot read property 'enums' of undefined
。请检查评论ERROR LINE
。
const app = {
enums: {
ROCK: 'ROCK',
PAPER: 'PAPER',
SCISSORS: 'SCISSORS',
DEFAULT_USER_CHOICE: this.ROCK //default, take note of this keyword
},
prop: {
isGameRunning: false,
mySelection: this.app.enums.ROCK //ERROR LINE
}
};
我也试过了mySelection: app.enums.ROCK
,在这种情况下我得到了Uncaught ReferenceError: Cannot access 'app' before initialization
。
示例 1: https ://jsfiddle.net/5zp7yode/
示例 2: https ://jsfiddle.net/5zp7yode/1/
以下工作没有任何问题:
var person = {
firstName: "John",
lastName : "Doe",
id : 5566,
fullName : function() {
return this.firstName + " " + this.lastName;
}
};
alert(person.fullName());
示例 3: https ://jsfiddle.net/0o93afLq/
我也尝试过以下但仍然无法访问道具内的枚举:
const app = {
self: this,
enums: {
ROCK: 'ROCK',
PAPER: 'PAPER',
SCISSORS: 'SCISSORS',
DEFAULT_USER_CHOICE: this.ROCK //default, take note of this keyword
},
prop: {
isGameRunning: false,
mySelection: self.enums.ROCK
}
};
alert(app.prop.mySelection);
示例 4: https ://jsfiddle.net/x89kj2zn/
另一个使用函数,但我不能在里面调用函数prop
:
const app = {
enums: {
ROCK: 'ROCK',
PAPER: 'PAPER',
SCISSORS: 'SCISSORS',
DEFAULT_USER_CHOICE: this.ROCK //default, take note of this keyword
},
prop: {
isGameRunning: false
},
getMySelection: function(){
return app.enums.ROCK;
}
};
alert(app.getMySelection());
解决方案
你可以利用get
.
const app = {
enums: {
ROCK: 'ROCK',
PAPER: 'PAPER',
SCISSORS: 'SCISSORS',
get DEFAULT_USER_CHOICE(){
return app.enums.ROCK
}
},
prop: {
isGameRunning: false,
get mySelection(){
return app.enums.ROCK
}
}
};
console.log(app)
推荐阅读
- vue.js - 获取未捕获的类型错误:无法读取 Vue.use(Vuex) 上未定义的属性“使用”
- php - 如何使用 symfony 5 设置实体属性的默认值
- ios - Swift在第一个collectionview单元格中添加相机预览
- python - 我需要对 windows 机器的 python linux 依赖
- excel - 如何在工作表之间复制一系列单元格?
- python - Django Rest Framework:验证序列化程序时如何忽略“唯一”主键约束?
- c - 估计 DEFLATE 的 (zlib) 当前压缩大小而不刷新的方法
- oracle - Oracle - ORA-02270:此列列表错误没有匹配的唯一键或主键
- python - 如何发送字典上下文数据以从 django 中的模板查看
- google-cloud-platform - 通过多次调用的 Dialogflow 插槽