Reading that looks like nobody answered my question, explained through some code that wouldn't have any issue with subclassing.
So no, there's no answer to my latest question in there, unless I've missed it. On Thu, Jul 19, 2018 at 7:56 PM Jordan Harband <[email protected]> wrote: > This question has been answered here: > https://github.com/tc39/ecma262/issues/544 > > On Thu, Jul 19, 2018 at 9:27 AM, Andrea Giammarchi < > [email protected]> wrote: > >> > Per the KISS principle, let’s avoid to be clever. >> >> I think my next code example is less clever, but the only reason I've >> written hacks or code was not to be advocated or adopted, just to explain >> what could happen internally. >> >> TL;DR why aren't public static methods that need context **all** lazily >> defined as bound (once) on demand? That would make every single public >> static method consistent, accordingly with the Class you extracted them >> from, right? That's not clever, that's usually developers expectations >> because historically all public static methods don't need the Class to work. >> >> On Thu, Jul 19, 2018 at 5:23 PM Claude Pache <[email protected]> >> wrote: >> >>> >>> >>> > Le 19 juil. 2018 à 16:32, Andrea Giammarchi < >>> [email protected]> a écrit : >>> > >>> > I know it's about subclassing, which is why I've asked why, once >>> there's no context, the default/base one is not considered, but since >>> everyone came back with the subclassing issue, which is actually what I've >>> said myself on twitter about the current state, how about changing all >>> public static methods that need it, to be getters ? >>> > >>> > ```js >>> > class Promise { >>> > #resolve(...args) { >>> > return this.nativeImplementation(...args); >>> > } >>> > get resolve() { >>> > return #resolve.bind(this); >>> > } >>> > } >>> > ``` >>> > >>> > we could argue `Promise.resolve === Promise.resolve` should be >>> preserved, as behavior, so that we need a lazy defined getter ... **but** >>> why not making public static restructuring from known constructors work >>> regardless, under all circumstances ? >>> > >>> >>> Nice hack... But it imposes all subclasses of `Promise` that override >>> the `resolve` method to use a similar trick, because the following will >>> break: >>> >>> ```js >>> class MyPromise extends Promise { >>> static resolve() { >>> // do fancy stuff >>> return super.resolve() >>> } >>> } >>> >>> const {resolve} = MyPromise >>> >>> resolve() // TypeError: undefined is not an object >>> ``` >>> >>> Per the KISS principle, let’s avoid to be clever. >>> >>> —Claude >>> >>> >> _______________________________________________ >> es-discuss mailing list >> [email protected] >> https://mail.mozilla.org/listinfo/es-discuss >> >> >
_______________________________________________ es-discuss mailing list [email protected] https://mail.mozilla.org/listinfo/es-discuss

