javascript - 如何访问其他对象兄弟的值?
问题描述
我只是想知道是否可以像下面这样在对象兄弟中引用自我(对象)值?
[
{
"name": "Zulh",
"name_uppercase": uppercase(self.name) // expects ZULH
},
{
"name": "John",
"name_uppercase": uppercase(self.name) // expects JOHN
}
]
注意:
uppercase
为简洁起见,省略了代码。在我的真实代码中,它正在做同步复杂的事情,实际上并不是像那样简单的字符串大小写操作。
解决方案
使用 GETTER
如果你想让它保持动态并且即使你改变了name
属性也让它工作,你可以使用GETTER来做这种事情:
const names = [
{
"name": "John",
get name_uppercase() {
return this.name.toUpperCase();
}
}
]
console.log(names[0].name_uppercase)
多个对象的 GETTER
您不必手动为每个属性编写此代码!使用.forEach
:
const names = [
{
"name": "John"
},
{
"name": "Mike"
}
]
names.forEach(object => {
Object.defineProperty(object, 'nameUppercase', {
get: function() { return this.name.toUpperCase() }
});
});
console.log(names[0].nameUppercase)
console.log(names[1].nameUppercase)
使用类和 GETTER
或者正如@Rajesh 指出的那样,您可以改用一个类:
class Person {
constructor(name) {
this.name = name;
}
get nameUpperCase() {
return this.name.toUpperCase();
}
}
const names = [ new Person("John"), new Person("Mike")];
console.log(names[0].nameUpperCase);
console.log(names[1].nameUpperCase);
推荐阅读
- scala - Scala设置交叉点性能
- c - 部分匹配后,scanf() 忽略输入的剩余部分?
- php - 在php中替换以@开头的单词
- akka - 如何在 Actor 模型框架(例如,akka.net)中执行非幂等操作(发送电子邮件)?
- python - Keras 中的展开层
- c# - 通过 Microsoft Team Foundation Server 2018 中的 API 从模板创建任务
- java - 如何创建 Spring Boot 控制器
- jquery - 用 jQuery 承诺
- c++ - C++ GetDC 所有监视器
- python - 如何在 config.ini 文件中加载环境变量?