【发布时间】:2014-09-18 00:30:27
【问题描述】:
export class Globals
{
static m_Name : string = "Hello world";
static m_Version : number = 1.0;
static m_Canvas : HTMLCanvasElement = null;
static m_Foo : Foo = null;
}
public OnDocumentLoad() : void
{
Globals.m_Canvas = <HTMLCanvasElement>document.getElementById('myCanvas');
Globals.m_Foo = new Foo(m_Name, m_Version);
}
在 TypeScript 中使用 static 是否可以接受?除了使成员变量成为每个人都可以访问的成员而不管实例如何之外,我不确定在这种情况下静态在做什么。但是,例如,m_Foo 和 m_Canvas Globals 类中的有效实例,可以说有点像单例(没有任何未定义的检查,当然可能在 OnDocumentLoad 之后的任何时间)
最初我没有将 Globals 作为一个类,它们只是我在一个 .ts 文件中的通用 var 声明,我到处引用。但我想把它们组织成一个漂亮的小 Globals 类。到目前为止,这在我测试它的经验中是有效的,但我想看看 static 在这里所做的事情是否有我遗漏的地方。
我在这个主题上找到的最多的是规范: http://www.typescriptlang.org/Content/TypeScript%20Language%20Specification.pdf
带有 static 修饰符的成员声明称为静态成员声明。静态属性 成员声明在构造函数类型中声明属性(第 8.2.5 节),并且必须指定 在包含类中的所有静态属性成员声明中唯一的名称,带有 静态 get 和 set 访问器声明可能成对指定相同名称的例外。 请注意,实例和静态属性成员的声明空间是分开的。因此,有可能 拥有同名的实例和静态属性成员
由此我发现,您可以创建一个 Globals 的实例,它的成员将具有与例如调用 Globals.m_Name 不同的含义,但我不打算在这里这样做。
【问题讨论】:
-
我很犹豫,因为我不想对我从 C# 中学到的静态做出任何假设,并尝试将其应用于 Javascript/Typescript:P
标签: class static typescript