Tengo una clase a la que me gustaría incluir un método para anular algunas de las variables de instancia predeterminadas en el constructor, sin tener una docena de parámetros. Me gustaría hacer esto pasando un objeto en forma de:
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.En Python esto podría hacerse con
if overrides is not None: for key, value in overrides.items(): self.setattr(self, key, value)¿Hay un equivalente de JS o solo tengo que agregar un montón de parámetros con valores predeterminados?
Para su ejemplo dado, simplemente necesita usar la notación de corchetes para acceder a una propiedad desde una variable.
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 Una alternativa sería desestructurar los parámetros necesarios del objeto de overrides estableciendo los valores predeterminados apropiados y dejando el ...rest para usar en otro lugar.
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