Замена для arguments.callee.name - PullRequest
0 голосов
/ 27 сентября 2018

Есть ли более безопасная альтернатива arguments.callee.name?

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

Для этого мы разработали вспомогательную функцию для удаления этих методов:

const methodNotImplemented = (method) => throw new Error(`Method ${method} not implemented`);

Теперь было бы здорово, если бы мы могли просто сделатьчтобы избежать передачи имени метода вручную, но я получаю всевозможные предупреждения от eslint и тому подобное.

const methodNotImplemented = (method) => throw new Error(`Method ${method || argument.callee.name} not implemented`);

Это нормально, поскольку код будет работать только в Chrome или есть альтернатива, о которой кто-нибудь знает?

Пример использования:

class Base {
// method that should be overridden by application
requiredMethod() { 
    methodNotImlemented(' Base.requiredMethod') 
};

initialize() {
    requiredMethod();
}

}

// мы хотим убедиться, что методы здесь переопределены

class MyPlugin extends Base {
}

1 Ответ

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

Использование new Error().stack представляется наилучшим решением.Спасибо @vlaz.

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