【问题标题】:Static Members in a Global class全局类中的静态成员
【发布时间】: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


【解决方案1】:

如果要创建命名空间对象,请使用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;
}

【讨论】:

  • 秒杀我
  • 两者有什么区别?
  • 区别:模块是开放式的(可以添加成员)。类不是。那是大的。
  • 对象和函数有什么区别?模块 -> 对象,类 -> 函数。
猜你喜欢
  • 1970-01-01
  • 2018-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-05
相关资源
最近更新 更多