替换arguments.callee.name

时间:2018-09-27 12:40:32

标签: javascript google-chrome ecmascript-6

是否有比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 :(得分:0)

使用new Error().stack似乎是最好的解决方案。谢谢@vlaz。