如何在以下情况下实现单例模式?

lef*_*ick 5 javascript ecmascript-6

const instance = Symbol('instance');

class Parent {
    number;

    constructor() {
        const Class = this.constructor;

        if (!Class[instance]) Class[instance] = this;
        return Class[instance];
    }

    set_number (number) {
        this.number = number;
    }
}

class Child extends Parent {
    test () { }
}

class Child2 extends Parent {
    test () { }
}

const child = new Child();
const parent = new Parent();
const child2 = new Child2();

child.set_number(1);
child.test();

child2.set_number(2);
child2.test(); // child2.test is not a function

parent.set_number(3);

console.log(child.number); // output : 1
console.log(child2.number); // output : 3 (I want it to be 2.)
console.log(parent.number); // output : 3
Run Code Online (Sandbox Code Playgroud)

我通过将实例分配给构造函数来实现Singleton.

我希望以单例形式实现Parent,ChildChild2这三个类中的每一个.但是当我在其他类之前实例化Parent类时会出现问题.

我试图提出好主意,但失败了.有什么办法可以解决吗?

测试网址

a b*_*ver 2

Class[instance]查找instance整个原型(继承)链。因此,如果Child2它以 开头Child2,并且如果没有任何属性Parent,则以继续Object。结果是当Parent您想要创建 的实例时,您返回一个 的实例Child2

您不应使用查找来检查属性是否存在,而应使用hasOwnProperty()

if (!Class.hasOwnProperty(instance)) Class[instance] = this;
Run Code Online (Sandbox Code Playgroud)

这意味着如果Child2它本身(!)没有实例,则为其分配一个实例。