Любая причина использовать статические / частные статические методы в TypeScript? - PullRequest
0 голосов
/ 24 сентября 2018

Я думаю о, но не могу найти никакой причины использовать статические методы (в особенности конец приватной статической) в классе TypeScript.Я что-то путаюсь?Я задаю этот вопрос, потому что я видел такой код:

class Abc {

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

  private static myMethod() {
     ...
  }
} 

PS Для тех, кто пытается объяснить мне разницу между статическими и нестатическими методами и частным методом.Я знаю это очень хорошо благодаря моему многолетнему опыту в C #.Если вы внимательно прочитали вопрос - речь шла об их использовании в TypeScript.

Ответы [ 2 ]

0 голосов
/ 24 сентября 2018

Основное различие между статическим методом / свойством и нестатическим заключается в том, что: на уровне памяти будет создана часть памяти для статических полей, которая будет использоваться всеми объектами в классе.Так что это работает в C # или Java.

Для JavaScript это поведение было реализовано в ES6 + .Но для более ранних версий Ecma Scripts машинописный текст эмулирует этот случай.

В вашем случае метод myMethod() может использоваться как способ скрыть сложную ресурсоемкую функциональность не привязанного к конкретному экземпляру классаи скрыт от конечного пользователя.

См. этот код:

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");
0 голосов
/ 24 сентября 2018

Вы будете использовать приватные методы только внутри вашего класса.Это не доступно снаружи.То же, что Java и т. Д. То же самое для приватной статики.

Статика означает, что вы хотите получить доступ к методу по имени класса без создания объекта (создание экземпляра).Это также доступно из внешнего класса.Без статики вам нужно создать объект.

class Abc {

  public someMethod() { 
     Abc.myMethod(); // Here you are able to access the static method myMethod because you are in the same class. It is not possible to access myMethod from another class directly. But someMethod() you can access directly which takes e.g. the data from myMethod();
  }

  private static myMethod() { // It is private and only accessible within the class and static therefore you can access it over the class name Abc.myMethod()
     ...
  }
} 

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...