<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">So, why exactly is SuperCall forbidden in function bodies? If people work around it with Reflect.construct anyways, it just seems nice to use SuperCall instead — at least if new.target is defined<br class="">
<br class=""><div><blockquote type="cite" class=""><div class="">On Apr 23, 2015, at 9:24 PM, Erik Arvidsson <<a href="mailto:erik.arvidsson@gmail.com" class="">erik.arvidsson@gmail.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><p dir="ltr" class="">new.target is available in functions. </p>
<br class=""><div class="gmail_quote">On Thu, Apr 23, 2015, 21:02 C. Scott Ananian <<a href="mailto:ecmascript@cscott.net" class="">ecmascript@cscott.net</a>> wrote:<br class=""><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><p dir="ltr" class="">Is there any way to access `new.target` using ES5 syntax?</p><p dir="ltr" class="">It appears that the "correct" way to create a subclass using ES5 syntax is:<br class="">
```<br class="">
function MyPromise(executor) {<br class="">
  var self = Reflect.construct(Promise, [executor], new.target);<br class="">
  return self;<br class="">
}<br class="">
Object.setPrototypeOf(MyPromise, Promise);<br class="">
```<br class="">
But since `new.target` isn't accessible, we have to do something like:<br class="">
```<br class="">
function MyPromise(executor) {<br class="">
  var self = Reflect.construct(Promise, [executor], MyPromise); // <-- THIS<br class="">
  return self;<br class="">
}<br class="">
Object.setPrototypeOf(MyPromise, Promise);<br class="">
```<br class="">
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" class="">Is there any way around this?<br class="">
  --scott</p><p dir="ltr" class="">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 class="">
es-discuss mailing list<br class="">
<a href="mailto:es-discuss@mozilla.org" target="_blank" class="">es-discuss@mozilla.org</a><br class="">
<a href="https://mail.mozilla.org/listinfo/es-discuss" target="_blank" class="">https://mail.mozilla.org/listinfo/es-discuss</a><br class="">
</blockquote></div>
_______________________________________________<br class="">es-discuss mailing list<br class=""><a href="mailto:es-discuss@mozilla.org" class="">es-discuss@mozilla.org</a><br class="">https://mail.mozilla.org/listinfo/es-discuss<br class=""></div></blockquote></div><br class=""></body></html>