Как расширить статические свойства в ES Next?


Иногда (хотя и редко) вам нужно расширять, а не перезаписывать родительские статические свойства, такие как (очень неудачный) пример ниже:

class Person {
    static coreStats = {
        role: "slacker",
        weapon: null,
        speed: 4,
        vechicle: "roller blades",
    };
}

class Ninja extends Person {
    static coreStats = {
        role: "silent assassin",
        weapon: "katana",
        speed: 99,
    };
}

console.log(Ninja.coreStats); // But vechicle is no more

Как можно расширить статические свойства в дочернем классе, не нарушая родительские свойства?

1 4

1 ответ:

Вы можете сделать это так:

class Person {
    static coreStats = {
        role: "slacker",
        weapon: null,
        speed: 4,
        vechicle: "roller blades",
    };
}

class Ninja extends Person {
    static coreStats = Object.assign({}, Person.coreStats, {
        role: "silent assassin",
        weapon: "katana",
        speed: 99
    });
}
console.log(Ninja.coreStats);

Это приведет к слиянию coreStats и переопределению Person.coreStats с Ninja.coreStats в случае дублирования