类中的 Javascript 数组属性仅在从函数调用时返回

标签 javascript node.js

const Color = {
  RED: 'red',
  GREEN: 'green',
  BLUE: 'blue',

  values: [this.RED, this.GREEN, this.BLUE],

  allValues() {
    return [this.RED, this.GREEN, this.BLUE]
  }
}

console.log(Color.values); // [undefined, undefined, undefined]
console.log(Color.allValues()); // ["red", "green", "blue"]

我最近开始学习 javascript,这让我很困惑,我会考虑通过将其包装在一个函数 hacky 中来使其工作,并且真的很想避免这样做。我在这里做错了什么?

最佳答案

这在对象文字中是不可能的。虽然从文字 this 创建对象实例尚不可用。您可以创建并立即使用某些东西来初始化,或者使用 getter对于 values 属性(请参阅 @James 答案):

// initialization
const Color = {
  RED: 'red',
  GREEN: 'green',
  BLUE: 'blue',
  init() {
    this.values = [this.RED, this.GREEN, this.BLUE];
    return this;
  }
}.init();

console.log(Color.values);

只是为了好玩:如果你想完全排除 this 的使用,this(双关语)将是 es20xx 的替代品:

const Color = Object.entries({
  RED: 'red',
  GREEN: 'green',
  BLUE: 'blue'})
  .reduce( (o, [key, value]) => 
    ( o.values.push(value), {...o, [key]: value} ), {values: []} );
  
console.log(Color.values);

// Or using this utility method
const objWithValues = o => 
    ({...o, values: Object.entries(o).map(([key, value]) => value) });
const Color2 = objWithValues({
    RED: 'red',
    GREEN: 'green',
    BLUE: 'blue'});

console.log(Color2.values);

关于类中的 Javascript 数组属性仅在从函数调用时返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51578051/

相关文章:

javascript - 基于字符串数组过滤对象数组 "with partial match"

javascript - 从未定义的数据属性接收两个值

javascript - 有没有一种方法可以在不先编译的情况下渲染字符串灰尘模板?

javascript - 使用 13 个 OR 比较运算符编写 if 语句的简写方法?

javascript - 在 for 循环中访问 javascript 对象会返回未定义

javascript - 修改此node.js代码以输出.wav而不是.mp4?

node.js - 在后台执行计算密集型任务

javascript - 如何在保留所有环境的情况下暂停 Node REPL 并在稍后阶段恢复?

node.js - 如何在nodejs中终止连接

javascript - 模态窗口 - 如何覆盖整个屏幕?