繁体   English   中英

JavaScript:是否有与 Python setattr() 函数等效的函数?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM