es-discuss Digest, Vol 95, Issue 45
Brendan Eich
brendan at mozilla.org
Mon Jan 19 14:36:58 PST 2015
Kevin Smith wrote:
>
>
> They're currently spec'ed to throw. I wouldn't change that for
> ES6. It could change in the future.
>
>
> Granted.
>
> However, I don't think we should consider the design complete without
> an answer to this question, regardless of what gets specced for ES6.
> The answer may carry implications "in the large".
>
> To illustrate my thinking, if we answer that new built-ins should
> carry on the "factory when called" tradition of the pre-ES6 built-ins,
> then we are setting a very strong precedent for how user classes ought
> to behave. In that case, we can expect that users will want to
> implement "factory when called" as a default behavior for their
> classes. From that, we can foresee that the following pattern:
>
> if (!new.target) return new Whatever(...args);
>
> will become a kind of boilerplate. Obviously, we want to avoid
> boilerplate as a general rule. When taken together, these
> considerations might have a bearing on the overall design.
>
> So I think it will be a good exercise to think a "few steps ahead" on
> this question.
Agreed. If we believe most class constructors will construct when
called, we should bias the design that way. ASAP (which in my view
includes ES6).
If we want JS to impose a `new` tax on constructor calls, OTOH, for some
unstated (=== unknown) reason, let's be clear on that decision. If not
on the reason :-P.
> (I'm really pleased with this direction in the subclassing design, btw!)
In general, I am too. In particular re: future-proofing and normal vs.
abnormal or happy vs.less-happy path design ergonomics (as I think you
agree), I'm not.
/be
>
> Kevin
More information about the es-discuss
mailing list