<div></div><div>I believe you can subclass anything using code like this:</div><div></div><div>function MyPromise(executor) {</div><div> var self = new Promise(executor)</div><div> self.setPrototypeOf(self, MyPromise.prototype)</div><div> return self</div><div>}</div><div>Object.setPrototypeOf(MyPromise, Promise)</div><div></div><div></div><div>... and it can be easily subclassed itself in the same way.</div><div></div><div></div><div>24.04.2015, 04:02, "C. Scott Ananian" <ecmascript@cscott.net>:</div><blockquote type="cite"><p>Is there any way to access `new.target` using ES5 syntax?</p><p>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>Is there any way around this?<br />  --scott</p><p>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>,<p>_______________________________________________<br />es-discuss mailing list<br /><a href="mailto:es-discuss@mozilla.org">es-discuss@mozilla.org</a><br /><a href="https://mail.mozilla.org/listinfo/es-discuss">https://mail.mozilla.org/listinfo/es-discuss</a></p></blockquote>