如何在 es6/js 中的 class 中分配更新静态成员

How to assign the update the static member in a class in es6/js

这是一个简单的操作,但似乎有点棘手。 所以这是一个简单的 class 和静态方法。

export class MyClass {
  static foo = {"key" : "value"};

  static bar = JSON.parse(JSON.stringify(MyClass.foo));
  MyClass.bar["key"] = "newVal";
}

考虑到 foo 是一个非常大的对象,想要复制到另一个静态变量中 bar。应对后我想更新一些属性。

但这似乎不起作用,出现错误,Unknown keyword or identifier. Did you mean 'class'?

MyClass.bar["key"] = "newVal";这是无效的。

这里有什么问题?如何在分配后立即更新静态成员。

您可以使用 a static initialisation block:

class MyClass {
  static foo = {"key" : "value"};

  static bar = JSON.parse(JSON.stringify(MyClass.foo));
  static {
    MyClass.bar["key"] = "newVal";
  }
}
console.log(MyClass.foo);
console.log(MyClass.bar);

或者在静态块中进行整个初始化:

class MyClass {
  static foo = {"key" : "value"};

  static {
    //`this` in a static block refers to the class
    this.bar = JSON.parse(JSON.stringify(MyClass.foo));
    this.bar["key"] = "newVal";
  }
}
console.log(MyClass.foo);
console.log(MyClass.bar);

对于不支持静态块的环境,替代方案是 an immediately invoked function expression (IIFE)

class MyClass {
  static foo = {"key" : "value"};

  static bar = (() => {
    const obj = JSON.parse(JSON.stringify(MyClass.foo));
    obj["key"] = "newVal";
    return obj;
  })();
}
console.log(MyClass.foo);
console.log(MyClass.bar);

或者只是将更新放在 class 声明之后:

class MyClass {
  static foo = {"key" : "value"};
  static bar = JSON.parse(JSON.stringify(MyClass.foo));
}
MyClass.bar["key"] = "newVal";
console.log(MyClass.foo);
console.log(MyClass.bar);