gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 04:28:40 25 4
gpt4 key购买 nike

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

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

我想为 ParentChildChild2 这三个类分别实现单例。但是有一个问题,当我在其他类之前实例化 Parent 类时。

我试图想出好点子,但失败了。有什么办法可以解决吗?

test URL

最佳答案

Class[instance] 在整个原型(prototype)(继承)链中查找 instance。所以在 Child2 的情况下,它从 Child2 开始,如果没有属性,它继续 Parent,然后是 Object。结果是当您想要创建 Child2 的实例时返回 Parent 的实例。

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

if (!Class.hasOwnProperty(instance)) Class[instance] = this;

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

关于javascript - 以下情况如何实现单例模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50712744/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com