<p dir="ltr">new.target is available in functions. </p>
<br><div class="gmail_quote">On Thu, Apr 23, 2015, 21:02 C. Scott Ananian <<a href="mailto:ecmascript@cscott.net">ecmascript@cscott.net</a>> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><p dir="ltr">Is there any way to access `new.target` using ES5 syntax?</p>
<p dir="ltr">It appears that the "correct" way to create a subclass using ES5 syntax is:<br>
```<br>
function MyPromise(executor) {<br>
  var self = Reflect.construct(Promise, [executor], new.target);<br>
  return self;<br>
}<br>
Object.setPrototypeOf(MyPromise, Promise);<br>
```<br>
But since `new.target` isn't accessible, we have to do something like:<br>
```<br>
function MyPromise(executor) {<br>
  var self = Reflect.construct(Promise, [executor], MyPromise); // <-- THIS<br>
  return self;<br>
}<br>
Object.setPrototypeOf(MyPromise, Promise);<br>
```<br>
which works for only a single level of subclassing.  That is, it allows us to create and instantiate MyPromise, but now nobody can subclass MyPromise.  That's too bad.</p>
<p dir="ltr">Is there any way around this?<br>
  --scott</p>
<p dir="ltr">ps. Use case: My `prfun` package on npm subclasses `Promise` in order to add all the useful utility helpers without stomping on the global `Promise` object.  I'd like to do so in a way which is compatible with both native ES6 promises (if they are available) and properly-written ES5 shims.</p>
_______________________________________________<br>
es-discuss mailing list<br>
<a href="mailto:es-discuss@mozilla.org" target="_blank">es-discuss@mozilla.org</a><br>
<a href="https://mail.mozilla.org/listinfo/es-discuss" target="_blank">https://mail.mozilla.org/listinfo/es-discuss</a><br>
</blockquote></div>