Global类中的静态成员

use*_*991 1 static class typescript

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);
}
Run Code Online (Sandbox Code Playgroud)

这是staticTypeScript中可接受的用法吗?我不确定静态在这种情况下做什么,除了使成员变量类成员,每个人都可以访问,无论实例如何.但是,例如,在Globals类中是m_Foom_Canvas有效的实例,有点像单身人士可以这么说(没有任何未定义的检查,并且可能在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 S*_*ver 5

如果要创建名称空间对象,请使用module:

export module Globals
{
   export var m_Name : string = "Hello world";
   export var m_Version : number = 1.0;
   export var m_Canvas : HTMLCanvasElement = null;
   export var m_Foo : Foo = null;
}
Run Code Online (Sandbox Code Playgroud)

  • 差异:模块是开放式的(成员可以添加).课程不是.那是最大的一个. (2认同)