如何在 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);
这是一个简单的操作,但似乎有点棘手。 所以这是一个简单的 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);