是否可以从Typescript中的另一个类访问变量?

时间:2017-12-07 08:09:02

标签: typescript lazy-loading lazy-initialization

高级别:我有一个A类,其变量定义为"让_somevar"。 我正在寻找从另一个类B中为这个变量赋值的方法。

细节涉及更多: A类包含一个延迟加载某个模块的初始化方法,它有一个变量" _somevar"它保存了延迟加载的模块。 A类还有一些公共方法,用于检查此变量是否为null,并相应地执行。

现在,B类提供了一个初始化函数,用于同步/直接(不是延迟加载)加载模块。问题是来自A类的公共方法现在不会运行,因为" _somevar"没有设定。所以我试图从B类中设置它,以便仍然可以使用A类中的公共方法。

我知道可以对这些类进行大量的重构。但我并不拥有代码库,我试图在此处进行最少的代码更改以使其正常工作。

我很乐意听取你的建议。谢谢!

1 个答案:

答案 0 :(得分:1)

无法访问另一个类中的变量

可以访问公共成员,例如属性和方法。

如果扩展类,子类可以访问受保护的成员。

以下是一些解决方案,其中两个将变量提升为属性。另一个没有。

构造

如果ClassA依赖于somevar的初始化,它可以通过在其构造函数中要求依赖项来使依赖项显式化。这样,在提供依赖关系之前,您无法调用使用依赖关系的方法。

class Example {
    constructor(private somevar: SomeVar) {
    }


    myMethod() {
        this._somevar.doSomething();
    }
}

设置依赖

如果您正在进行一项严格的修改以修复问题,则可以添加一个接受依赖项的方法:

setDependency(somevar: SomeVar) {
    this.somevar = somevar;
}

然后,您可以在使用当前失败的方法之前调用此方法。然而,这是时间耦合的一种形式。需要在调用setDependency之前调用myMethod

传递给方法

未初始化依赖项时失败的方法可以更改为需要依赖项...

例如,这个:

myMethod() {
    this._somevar.doSomething();
}

成为这个:

myMethod(somevar: SomeVar) {
    somevar.doSomething();
}