title: Replacement for arguments.callee.name
body: <p>Is there a safer alternative to <code>arguments.callee.name</code>?</p>
  
  <p>My team is working on a library for Chromecast applications that uses class inheritance heavily. We'd like to ensure that some methods are overridden when the class is extended. </p>
  
  <p>To do so we've came up with a helper function to stub out these methods: </p>
  
  <p><code>
  const methodNotImplemented = (method) =&gt; throw new Error(`Method ${method} not implemented`);
  </code></p>
  
  <p>Now it would be really cool if we could just do this to avoid passing the method name manually, but I'm getting all kinds of warnings from eslint and such. </p>
  
  <p><code>
  const methodNotImplemented = (method) =&gt; throw new Error(`Method ${method || argument.callee.name} not implemented`);
  </code></p>
  
  <p>Is this okay since the code will only ever run in Chrome or is there an alternative that anyone knows of? </p>
  
  <p>Example usage:</p>
  
  <pre><code>class Base {
  // method that should be overridden by application
  requiredMethod() { 
      methodNotImlemented(' Base.requiredMethod') 
  };
  
  initialize() {
      requiredMethod();
  }
  </code></pre>
  
  <p>}</p>
  
  <p>// we want to make sure methods are overridden here</p>
  
  <pre><code>class MyPlugin extends Base {
  }
  </code></pre>