[英]JavaScript: Is there an equivalent to the Python setattr() function?
我有一个类,我想在其中包含一个方法来覆盖构造函数中的一些默认实例变量,而不需要十几个参数。 我想通过以下形式传递一个对象来做到这一点:
class MyClass {
constructor(overrides) {
this.instanceVar1 = default1;
this.instanceVar2 = default2,
for (key in overrides) {
this.key = overrides[key];
}
}
let overrides = {instanceVar1 : value,
instanceVar2 : value2};
let instance = new MyClass(overrides);
console.log(instance.instanceVar1) // Outputs value, not default1.
在 Python 中,这可以通过
if overrides is not None:
for key, value in overrides.items():
self.setattr(self, key, value)
是否有等效的 JS 或者我只需要添加一堆具有默认值的参数?
对于您给定的示例,您只需使用括号表示法来访问变量中的属性。
class MyClass { constructor(overrides) { this.instanceVar1 = 'default1'; this.instanceVar2 = 'default2'; for (const key in overrides) { this[key] = overrides[key]; // ^^^ } } } let overrides = { instanceVar1: 'value', instanceVar2: 'value2' } let instance = new MyClass(overrides); console.log(instance.instanceVar1); // value
另一种方法是从overrides
对象中解构所需的参数,设置适当的默认值,并将...rest
留在其他地方使用。
class MyClass { constructor({ instanceVar1 = 'default1', instanceVar2 = 'default2', ...overrides }) { this.instanceVar1 = instanceVar1; this.instanceVar2 = instanceVar2; console.log(overrides); // { extraVar1: 'another value' } } } let overrides = { instanceVar1: 'value', instanceVar2: 'value2', extraVar1: 'another value' } let instance = new MyClass(overrides); console.log(instance.instanceVar1); // value
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.