我上了这个班,打算以单身人士的身份工作,
export class SingletonClass {
public static instance: SingletonClass | undefined;
public name: string | undefined | null;
static getInstance() {
if (SingletonClass.instance == null || SingletonClass.instance == undefined)
SingletonClass.instance = new SingletonClass();
return SingletonClass.instance;
}
static destroy() {
SingletonClass.instance = undefined;
}
}
一个组件类有这样的代码,
export class TestComponent implements OnInit {
SingletonObject1: SingletonClass | undefined | null = SingletonClass.getInstance();
SingletonObject2: SingletonClass | undefined | null;
ngOnInit(): void {
this.SingletonObject1!.name = "Name1";
SingletonClass.destroy();
this.SingletonObject2 = SingletonClass.getInstance();
this.SingletonObject2.name = "Name2";
}
}
我希望SingletonObject1和SingletonObject2都引用同一个单例对象,因此在运行这段代码后,两个对象的name属性的值都应该是"Name2".但是这里发生的是SingletonObject1.name有"Name1",SingletonObject2.name有"Name2"作为它们的值.
如果我删除SingletonClass.destroy();它会像预期的那样工作.因此,即使在调用SingletonClass.instance = undefined;
之后,SingletonObject1也会保留对先前创建的对象的引用.
有人能解释一下为什么当它将instance设置为undefined时会创建两个变量实例,以及如何修改destroy方法以删除整个单例对象并保持两个变量对同一位置的引用.