2012-11-29 37 views
4
class MockFamily implements IFamily { 
    static instances: MockFamily[] = []; 

    constructor (nodeClass: { new(): Node; }, engine: Engine) { 
     MockFamily.instances.push(this); 
    } 

    /* sniiiiiip */ 
} 

中访问静态成员在上面的例子有没有办法从构造函数内访问静态instances值,而不使用实际的类名?如何从一个构造

+1

只是好奇,你想解决什么问题?如果没有其他方法的资格证明,我也无法访问它。 –

+0

我试图用静态实例解决的问题?这是一个用于集成测试的模拟对象,用于确保另一个类正确使用这些家族对象。其中一部分涉及需要轻松访问创建的模拟对象的实例,以确保发生某些事情。在这个模拟中还有其他方法被剔除以简单地跟踪它们被调用的频率,还有一些其他的东西可以让我轻松地对它们进行测试。我可以用Sinon的间谍来解决同样的问题,例如我没有。 – jdsmith2816

回答

8

静态变量总是通过类名访问。类对象充当具有属性的对象。最近你可能会来:

with (MockFamily) { 
    instances.push(this); 
} 

虽然我不会推荐它。

模块是另一回事。在运行时,它们的内容是函数范围内的变量,可以直接在几乎任何地方访问。

module MyModule { 
    var instances: IFamily[] = []; 

    export class MockFamily implements IFamily { 
     constructor (nodeClass: { new(): Node; }, engine: Engine) { 
      instances.push(this); 
     } 

     /* sniiiiiip */ 
    } 
} 
+1

啊,我喜欢这个解决方案;很简单,为什么我没有想到这一点? :P感谢您的帮助! – jdsmith2816