Subclassing ES6 objects with ES5 syntax.

C. Scott Ananian ecmascript at cscott.net
Fri Apr 24 01:02:12 UTC 2015


Is there any way to access `new.target` using ES5 syntax?

It appears that the "correct" way to create a subclass using ES5 syntax is:
```
function MyPromise(executor) {
  var self = Reflect.construct(Promise, [executor], new.target);
  return self;
}
Object.setPrototypeOf(MyPromise, Promise);
```
But since `new.target` isn't accessible, we have to do something like:
```
function MyPromise(executor) {
  var self = Reflect.construct(Promise, [executor], MyPromise); // <-- THIS
  return self;
}
Object.setPrototypeOf(MyPromise, Promise);
```
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.

Is there any way around this?
  --scott

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.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20150423/169cf726/attachment.html>


More information about the es-discuss mailing list