<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="">Ah, didn't notice the special case, thanks for the heads up.<div class=""><br class=""></div><div class="">Having methods for function in the prototype chain makes sense.</div><div class=""><br class=""></div><div class="">Another related question: If I want to override a superclass's constructor(), without calling it, I should do something like this?</div><div class=""><br class=""></div><div class="">```js</div><div class="">class A extends B {<br class="">   constructor() {<br class="">       let _this = Object.create(new.target.prototype);</div><div class="">       return _this;<br class="">   }<br class="">}</div><div class="">```</div><div class=""><br class=""></div><div class="">Anyway to use `this` here? Having to use a different name is a bit painful.</div><div class=""><br class=""><div><blockquote type="cite" class=""><div class="">On May 7, 2015, at 6:55 PM, Claude Pache <<a href="mailto:claude.pache@gmail.com" class="">claude.pache@gmail.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><meta http-equiv="Content-Type" content="text/html charset=utf-8" class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><br class=""><div class=""><blockquote type="cite" class=""><div class="">Le 7 mai 2015 à 11:49, Glen Huang <<a href="mailto:curvedmark@gmail.com" class="">curvedmark@gmail.com</a>> a écrit :</div><br class="Apple-interchange-newline"><div class=""><meta http-equiv="Content-Type" content="text/html charset=utf-8" class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">Isn't super-constructor null in this case?<div class=""><br class=""></div><div class="">From step 4 in <a href="https://people.mozilla.org/~jorendorff/es6-draft.html#sec-getsuperconstructor" class="">https://people.mozilla.org/~jorendorff/es6-draft.html#sec-getsuperconstructor</a></div><div class=""><br class=""></div><div class="">superConstructor is C.[[GetPrototypeOf]]()</div><div class=""><br class=""></div><div class="">which should be `null` after the class definition, if I'm not wrong. (But it finally throws due to type error, so technically speaking, you can't even reference the super constructor)<br class=""></div></div></div></blockquote><div class=""><br class=""></div><div class="">No, as a special case of the `extends` semantics, `C.[[GetPrototypeOf]]()` will be %FunctionPrototype%; see step 6.e.ii of:</div><div class=""><a href="http://people.mozilla.org/~jorendorff/es6-draft.html#sec-runtime-semantics-classdefinitionevaluation" class="">http://people.mozilla.org/~jorendorff/es6-draft.html#sec-runtime-semantics-classdefinitionevaluation</a></div><div class=""><br class=""></div><div class="">The reason is presumably that, since the constructor is a function, it should always have the methods for functions (`.bind`, `.call`, etc.) on its prototype chain.</div><div class=""><br class=""></div><div class="">The true meaning of `C extends null` is the following: The instances of `C` won’t have %ObjectPrototype% in their prototype chain. (For the use cases, don’t ask me.)</div><div class=""><br class=""></div><div class="">—Claude</div></div></div></div></blockquote></div><br class=""></div></body></html>