【问题标题】:How to override object get fallback如何覆盖对象获取回退
【发布时间】:2021-01-10 22:40:11
【问题描述】:

我正在尝试创建一个对象,该对象返回所访问的任何属性的属性名称。这可以在javascript / nodejs中干净地完成吗?这就是我想要完成的:

const mirror = {/*...*/};
console.log(mirror[1]);
// => 1
console.log(mirror.123);
// => '123'
console.log(mirror.randomPropertyHere);
// => 'randomPropertyHere'

我可以覆盖特定属性的 getter,但我不知道如何通用。还有如何区分数字和字符串?

我的(不工作)尝试

const mirror = {
  get[1] () {
    console.log('number');
    return 1;
  },
  get['1'] () {
    console.log('string');
    return '1';
  }
};

console.log(mirror[1]);
console.log(mirror['1']);

非常感谢您的宝贵时间和帮助!

【问题讨论】:

  • 既然你已经知道你要得到的财产,为什么你还需要知道呢?似乎是多余的。更不用说你不能拥有一个数字的 Object 属性。该数字将转换为字符串。由于属性相同,因此只有最后一种方法有效。

标签: javascript node.js object properties getter


【解决方案1】:

使用代理。

const mirror = new Proxy({}, {
  get(_, prop) { return prop; }
});
console.log(mirror[1]);
// => 1
console.log(mirror['123']);
// => '123'
console.log(mirror.randomPropertyHere);
// => 'randomPropertyHere'

还有如何区分数字和字符串?

不能,对象属性必须是字符串或符号。

【讨论】:

  • 啊,这是一个好的开始,谢谢!我可以使用数组的代理然后返回数字吗?我需要一个数字代理和一个不同的字符串代理。
  • 没有。 arr[1] = 5arr['1'] = 5 之间没有区别,因为对象属性必须是字符串或符号。代码中的数字会自动转换为字符串属性。
猜你喜欢
  • 2010-10-28
  • 1970-01-01
  • 1970-01-01
  • 2015-07-07
  • 1970-01-01
  • 1970-01-01
  • 2011-06-02
  • 1970-01-01
  • 2010-10-09
相关资源
最近更新 更多