- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
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。
我想为 Parent、Child 和 Child2 这三个类分别实现单例。但是有一个问题,当我在其他类之前实例化 Parent 类时。
我试图想出好点子,但失败了。有什么办法可以解决吗?
最佳答案
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/
我最近购买了《C 编程语言》并尝试了 Ex 1-8这是代码 #include #include #include /* * */ int main() { int nl,nt,nb;
早上好!我有一个变量“var”,可能为 0。我检查该变量是否为空,如果不是,我将该变量保存在 php session 中,然后调用另一个页面。在这个新页面中,我检查我创建的 session 是否为空,
我正在努力完成 Learn Python the Hard Way ex.25,但我无法理解某些事情。这是脚本: def break_words(stuff): """this functio
我是一名优秀的程序员,十分优秀!