Fwd: es-discuss Digest, Vol 95, Issue 45

Fabrício Matté ultcombo at gmail.com
Mon Jan 19 14:41:23 PST 2015

> 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.


I personally consider `new` as user code pollution.
I have been considering to use classes but export factories in my libraries
and packages' code. The initial idea was:

class Foo {/*...*/}

module.exports = function(...args) {
return new Foo(...args);

But the sample above has obvious problems:

1. It becomes a tedious boilerplate to wrap every single class into a
function export;
2. It can't be transpiled to ES5. Rest parameters are transpiled to
`.apply()` which can only do [[Call]] and not [[Construct]].

(forgot to CC es-discuss before oops, let's see if this forward goes
correctly now)

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20150119/1dd92b18/attachment.html>

More information about the es-discuss mailing list