【问题标题】:accessing static member from non-static function in typescript从打字稿中的非静态函数访问静态成员
【发布时间】:2014-04-26 07:34:00
【问题描述】:

我正在尝试从类中的非静态函数访问静态成员,但出现错误提示

静态成员不能被实例变量访问

这就是我的代码的样子 -

class myClass {
  public static testStatic: number = 0;
  public increment(): void {
    this.testStatic++;
  }
}

根据我对静态成员/方法的理解,我们不应该在静态函数中访问非静态成员,反之亦然。 静态成员已经创建并且有效,为什么我不能从我的非静态方法访问?

【问题讨论】:

    标签: typescript static-methods static-members non-static


    【解决方案1】:

    从类内部访问静态成员的方式与从类外部访问静态成员的方式相同:

    class myClass {
      public static testStatic: number = 0;
      public increment(): void {
        myClass.testStatic++;
      }
    }
    

    【讨论】:

    • 它有效,但这不是一个很好的做法。打字稿应该有一个关键字。像静态:: 在 php.ini 中的东西。原因是您正在像这样复制班级的名称。基本上每个实例都应该知道它的类,对吧?
    • 我不明白为什么课程需要它而不是其他任何东西都需要它。封闭函数的名称、封闭模块的名称等没有关键字。
    【解决方案2】:

    我个人更喜欢以下精神:

    class myClass{
        public static testStatic: number = 0;
        private class;
    
        constructor(){
            this.class = myClass;
        }
    
        public increment(): void {
            this.class.testStatic++;
        }
    }
    

    一个很酷的事情是打字稿实际上允许我使用“类”作为变量。

    【讨论】:

    • 它仍然是重复,但只是在一个地方重复 - 构造函数。
    【解决方案3】:

    为了允许继承,您必须在实例方法中使用,以免重复 className:

    <typeof ParentClass>this.constructor

    请参阅此答案中的更新部分: https://stackoverflow.com/a/29244254/1936549

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-29
      • 1970-01-01
      • 2013-05-03
      相关资源
      最近更新 更多