Я хочу иметь доступ к методу как из экземпляра, так и из класса:
class AClass {
// I want to make this both static and normal
method() {
console.info("Method called");
}
}
Я бы ожидал, что смогу получить доступ к методам static из экземпляра (как в python с @staticmethod), но я не могу, так как выдает ошибку:
class AClass {
static method() {
console.info("Method called");
}
}
AClass.method(); // this works
(new AClass).method(); // this doesn't work@MarcellPerger, тогда просто назовите их одинаково?
Итак, почему бы просто не присвоить свойство экземпляру в конструкторе? constructor() { this.method = AClass.method; }
Если у меня есть много статических методов для объекта, конструктор может стать очень длинным, и я бы предпочел сохранить каждую функцию в одной области кода, но это все же лучше, чем ничего.
«(new AClass).method();, это не работает» — это не должно работать. Зачем вам вызывать статический метод, не связанный с экземплярами, для экземпляра? JavaScript — это не Java, просто используйте AClass.method(), который работает. Если очень нужно, (new AClass).constructor.method().



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Создайте нестатический метод с тем же именем и вызовите статический метод из нестатического метода.
class AClass {
static method() {
console.info("Method called");
}
method() {
AClass.method();
}
}
AClass.method(); // this works
(new AClass).method(); // this now worksЭто почти то же самое, что ответ Берхи здесь , но с той существенной разницей, что это хуже, поскольку не будет уважать наследование. Рассмотрим class A { static method() { /* logic for a */ } }, а затем class B extends A { static method() { /* logic for B */} } При прямом вызове статического метода из A метод, определенный в B, будет проигнорирован. В то время как с this.constructor.method() будет использоваться дочерний метод, если таковой имеется. Демо: jsbin.com/wucaxifali/1/edit?js,консоль
@VLAZ Избегайте ответов на вопросы комментариями
Я уже ответил на вопрос дубликатом. Этот комментарий был критикой ответа, указывающего на недостаток, который уже устранен в дубликате. Говоря о: избегайте дубликатов ответов.
Нет, я хочу, чтобы одно и то же имя было как для статического метода, так и для метода экземпляра. Этот вопрос касается вызова статического метода из метода экземпляра (другое имя)