首页 > 解决方案 > 如何访问其他对象兄弟的值?

问题描述

我只是想知道是否可以像下面这样在对象兄弟中引用自我(对象)值?

[
  {
    "name": "Zulh",
    "name_uppercase": uppercase(self.name) // expects ZULH
  },
  {
    "name": "John",
    "name_uppercase": uppercase(self.name) // expects JOHN
  }
]

注意

uppercase为简洁起见,省略了代码。在我的真实代码中,它正在做同步复杂的事情,实际上并不是像那样简单的字符串大小写操作。

标签: javascriptarraysobject

解决方案


使用 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);


推荐阅读