Как вы можете определить, является ли метод класса js статическим или нет? - PullRequest
0 голосов
/ 05 февраля 2019

Например, в javascript, как мы можем определить разницу между:

class Foo { 
   bar() {
   }
}

и

class Foo { 
   static bar() {
   }
}

Особенно, если мы разрешаем наследование, поэтому Foo может расширяться Fo,который также может определять метод с тем же именем.

Контекст: я пишу утилиту отражения, которая должна работать с кодом других людей и должна перечислять методы класса static против экземпляра класса.

Ответы [ 2 ]

0 голосов
/ 05 февраля 2019

Ключевое слово static определяет статический метод для класса.Статические методы не вызываются в экземплярах класса.Вместо этого они вызваны на сам класс.Часто это служебные функции, такие как функции для создания или клонирования объектов.Таким образом, вы можете использовать <class name>.hasOwnProperty("FUNCTION NAME"), чтобы проверить это.Он вернет True, если метод static и false, если нет

0 голосов
/ 05 февраля 2019

Если метод статический, он будет отображаться как свойство конструктора:

typeof(Foo.bar) === 'function';  //true

Если метод нестатический, он будет отображаться только в прототипе класса:

typeof(Foo.prototype.bar) === 'function';  //true
typeof(Foo.bar) === 'function';            //false

С наследованием вам придется выполнять какую-то рекурсию, но сложно аккуратно получить цепочки наследования с текущим синтаксисом.

...