2013-05-09 105 views
23

我有这个类,每次类实例化时都需要增加一个数字。 我发现两种方法来这个地方两种方式的工作原理,但我还没有确定什么是最好的做法TypeScript:全局静态变量最佳实践

  1. 声明变量在模块范围

    module M { 
        var count : number = 0; 
        export class C { 
        constructor() { 
         count++; 
        } 
        } 
    } 
    
  2. 声明变量在类范围和访问它的类

    module M { 
        export class C { 
        static count : number = 0; 
        constructor() { 
         C.count++; 
        } 
        } 
    } 
    

我的看法是Ë xample两个,因为它不会在模块范围中添加count变量。

参见:C# incrementing static variables upon instantiation

回答

21

绝对方法2,因为这是使用可变的类。所以它应该包含它。

在案例1中,你使用的是可变的,这将变得混乱,一旦你在那里有一个以上的类如:

module M { 

    var count : number = 0; 

    export class C { 
    constructor() { 
     count++; 
    } 
    } 

    export class A{ 
    } 
} 
+1

如果C类是没有用我不会打扰在封装级看到它的计数唯一的一个。更重要的是变量名称。在代码中的大部分地方,“count”这个名称并不足以说明它代表什么。我更喜欢'numConstructed'或'structuredCount'。 – 2013-05-09 15:31:20

+0

同意,他们应该具体!这里使用的代码只是例子 – 2013-05-09 20:50:08

1

他们两人都是好的,但method 2更多的自我解释,这意味着它的少当你的代码变得更加复杂,除非你每次使用count来增加你从这个模块实例化一个类,然后method 1是要走的路。

我喜欢做这样说:

module M { 
    export class C { 
    static count : number = 0; 
    constructor() { 
     C.count++; 
    } 
    } 
}