Как сделать так, чтобы this в статической функции класса ES6 указывало на саму функцию

Я хочу получить имя статической функции в классе ES6, и я не получил правильного результата, когда сделал это.

class Point {
  static findPoint() {
    console.log(this.name) // <- I want to print "findPoint" but get "Point"
  }
}
Point.findPoint()

Что я могу сделать, чтобы получить имя статического метода?


person mutoe    schedule 01.11.2018    source источник
comment
Для чего?   -  person Ry-♦    schedule 01.11.2018
comment
В моей бизнес-логике много подобных методов, и они могут вызывать ошибки. Я хочу вернуть имя функции, которая возвращает ошибку обратно клиенту. Я оборачиваю это как общий метод возврата, но я не знаю, какой метод вызовет ошибку.   -  person mutoe    schedule 02.11.2018


Ответы (2)


Один из вариантов — создать Error и изучить его стек — верхний элемент в стеке будет именем текущей функции:

class Point {
  static findPoint() {
    const e = new Error();
    const name = e.stack.match(/Function\.(\S+)/)[1];
    console.log(name);
  }
}
Point.findPoint();

Хотя error.stack технически нестандартен, он совместим со всеми основными браузерами, включая IE.

person CertainPerformance    schedule 01.11.2018

this.name относится к имени класса. Используйте this.findPoint.name, чтобы получить имя статической функции. Синтаксис должен быть object.someMethod.name. Вы должны сказать, какое имя метода вы хотите. Надеюсь, что это поможет вам.

class Point {
  static findPoint() {
    console.log(this.findPoint.name)
  }
}
Point.findPoint()
person Rajkumar A    schedule 01.11.2018