typescript - 有什么理由在 TypeScript 中使用静态/私有(private)静态方法吗?

标签 typescript oop

我正在考虑但找不到任何理由在 TypeScript 类中使用静态方法(尤其是 private static)。我错过了什么吗? 我问这个问题是因为我看到了这样的代码:

class Abc {

  public someMethod() {
     Abc.myMethod();
  }

  private static myMethod() {
     ...
  }
} 

P.S. 对于那些试图向我解释静态和非静态方法的区别以及什么是私有(private)方法的人。由于我多年的 C# 背景,我非常了解这些。如果您仔细阅读问题 - 这是关于在 TypeScript 中使用它们。

最佳答案

静态方法/属性与非静态方法/属性的主要区别在于:在内存级别,将为静态字段创建一部分内存,该内存将在类中的所有对象之间共享。所以它适用于 C# 或 Java。

对于 javascript,此行为已在 ES6+ 中实现.但对于早期版本的 Ecma 脚本,typescript 会模拟这种情况。

在您的情况下,方法 myMethod() 可用作隐藏复杂资源密集型功能的方法,这些功能未绑定(bind)到类的特定实例,并且对最终用户隐藏。

查看这段代码:

class A {
    protected _p: string;
    constructor() { 
        this._p = "A";
    }
    public someMethod(value: string) {
        A.myMethod(this._p + value);
    }
    private static myMethod(p:string) {
        console.log(p);
    }
} 

class B extends A {
    constructor() { 
        super();
        this._p = "B";
    }
}

var a1 = new A();
a1.someMethod("_1");
var a2 = new A();
a2.someMethod("_2");
var b1 = new B();
b1.someMethod("_1");

关于typescript - 有什么理由在 TypeScript 中使用静态/私有(private)静态方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52481219/

相关文章:

css - 如何将水平滚动添加到 mat 自动完成

javascript - 如何访问 Angular 2 对象的属性

angular - 如何使用异步管道检查在 View 中呈现的 Observable 的长度

c++ - 使用 void *pointer to object 的安全性

oop - 可变对象与不可变对象(immutable对象)

php - 如何在 Laravel 中添加动态页面标题

python - 如何设计复杂的 Bokeh 应用程序?

javascript - Fabricjs 中的每个事件都会触发按钮单击事件

javascript - Vue + Typescript + Webpack : Module build failing - Can't find vue. esm.js

c# - 抽象类的特点