【问题标题】:Is it possible to access variables from another class in Typescript?是否可以从 Typescript 中的另一个类访问变量?
【发布时间】:2017-12-07 08:09:01
【问题描述】:

高级:我有一个 A 类,它有一个定义为“let _somevar”的变量。 我正在寻找从另一个类 B 为这个变量赋值的方法。

细节有点多: A 类包含一个延迟加载某些模块的初始化方法,它有一个变量“_somevar”,用于保存延迟加载的模块。 A 类也有一些公共方法,它们检查这个变量是否为空并相应地执行。

现在 B 类提供了一个初始化函数来同步/直接(不是惰性加载)加载模块。问题是 A 类的 公共方法 现在无法运行,因为未设置“_somevar”。所以我试图从 Class B 中设置它,以便仍然可以使用 Class A 中的公共方法。

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

我很想听听你的建议。谢谢!

【问题讨论】:

  • 不要描述你的代码。发布它。

标签: typescript lazy-loading lazy-initialization


【解决方案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();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-07
    • 2020-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-22
    相关资源
    最近更新 更多