如何在ES Next中扩展静态属性

How do you extend static properties in ES Next?

本文关键字:扩展 静态 属性 Next ES      更新时间:2023-09-26

有时(尽管很少)需要扩展而不是覆盖父静态属性,例如下面的(非常蹩脚的)示例:

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

如何在不破坏父属性的情况下扩展子类中的静态属性?

您可以这样做:

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,并在重复的情况下用Ninja.coreStats覆盖Person.coreStats