Singleton类丢失特定范围内的属性

时间:2016-12-02 13:48:41

标签: typescript

我在一个大项目中使用VSC发生了几次奇怪的错误。

我有一个单例类引用了一堆类,其中一些类引用了该单例类。在该项目的开发过程中,我有两次在运行时完全丢失了单例类属性和方法的类。

例如我会这样做(让我们说单例类是A):

在C班:

A.someMethod()//no problem

在D组:

A.someMethod()//error A is an object but has no properties or method

在E班:

A.someMethod();//no problem

因此,在D范围内的某些原因,A是一个空对象。

这发生在2个类中,每次我通过删除项目中任何位置的所有类的引用来修复它,然后重命名这些类的模块,注释掉这些类中的所有代码,然后正确地重命名模块,编译和然后所有都修复了,我可以添加这些类的引用并恢复代码,现在单例类引用不再是空的。

所以这很奇怪,任何人都有这方面的经验吗?它是编译器错误还是一些Javascript怪异的东西?

好吧,我确实尝试过小班,我遇到了同样的问题:

class A
{
    constructor()
    {
        new B();
        C;
    }

    public static getClassA():A
    {
        return new A();
    }
}

如果B和C确实引用了A,那么对A的引用就是一个空对象(甚至不是一个类)。如果B和C由A的静态方法引用(因此它不仅仅是构造函数),显然也会发生相同的情况。尚不确定会员方法。即使我没有实例化C,C类也会遇到同样的问题。

更新:问题是任何类在构造函数中引用另一个类(以这种或那种方式),并且其他类以任何方式直接引用第一类(import,static,instantiation等等)发现第一个类在运行时完全为空,所有属性/方法成员或静态都消失了。

1 个答案:

答案 0 :(得分:0)

这个问题并没有引起太大的兴趣所以这就是我发现的答案。

情况:

A类在构造函数类B中引用。 B类确实引用了A类(以任何方式)

后果:

然后在B类中,A类是空的,没有属性或方法成员或静态。

解决方案:

我找到的唯一解决方案是确保任何引用任何其他类的类本身不会被这些类引用。