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,Child和Child2这三个类中的每一个.但是当我在其他类之前实例化Parent类时会出现问题.
我试图提出好主意,但失败了.有什么办法可以解决吗?
Class[instance]查找instance整个原型(继承)链。因此,如果Child2它以 开头Child2,并且如果没有任何属性Parent,则以继续Object。结果是当Parent您想要创建 的实例时,您返回一个 的实例Child2。
您不应使用查找来检查属性是否存在,而应使用hasOwnProperty():
if (!Class.hasOwnProperty(instance)) Class[instance] = this;
Run Code Online (Sandbox Code Playgroud)
这意味着如果Child2它本身(!)没有实例,则为其分配一个实例。
| 归档时间: |
|
| 查看次数: |
79 次 |
| 最近记录: |