<div dir="ltr">Not exactly ... if it's an Array, as example, the moment you slice/map/splice/concat, etc will return an instanceof Array, not an instance of whatever you have sublcassed.<div><br></div><div>Regards</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Apr 24, 2015 at 10:24 AM, Alex Kocharin <span dir="ltr"><<a href="mailto:alex@kocharin.ru" target="_blank">alex@kocharin.ru</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><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" <<a href="mailto:ecmascript@cscott.net" target="_blank">ecmascript@cscott.net</a>>:</div><blockquote type="cite"><div><div class="h5"><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></div></div>,<span class=""><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></p></span></blockquote><br>_______________________________________________<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" target="_blank">https://mail.mozilla.org/listinfo/es-discuss</a><br>
<br></blockquote></div><br></div>