Promise() vs. new Promise()

Andrea Giammarchi andrea.giammarchi at
Wed Aug 20 20:18:10 PDT 2014

To this I'd like to add that in ES6 you don't need to explicitly invoke
inherited class constructor but rather use `super`

True is that this `new` story makes Mixins like constructors more difficult
to use as classes becuase these cannot be invoked via `.call` or `.apply`
directly and requires a very boring `init()` like method.

Although there's nothing for mixins or their initialization in ES6 so it's
OKish ...

Last, but not least, since you use instanceof, I'd like to underline in ES5
capable browser you have another pattern.

function SelfInstance() {'use strict';
  return this || new SelfInstance;

no need to use the `instanceof` check when `this` could be undefined ^_^


On Wed, Aug 20, 2014 at 5:55 PM, Alex Kocharin <alex at> wrote:

> 20.08.2014, 19:18, "Claude Pache" <claude.pache at>:
> > Le 20 août 2014 à 16:56, Alex Kocharin <alex at> a écrit :
> >>  But... why?
> >>
> >>  I mean, every constructor can determine if it is called without `new`
> (that "this instanceof" check on top of every other constructor). So `new`
> keyword can really be removed from everywhere except in constructors
> themselves.
> >>
> >>  Using `new` does create issues. For example, you can't write "new
> require('something').Constructor(blah)", and I don't even remember how to
> put brackets right.
> >>
> >>  Why make people use it?
> >
> > According to (search for
> "anti-pattern"), allowing constructors without `new` would break
> subclassing.
> Still doesn't make much sense... This pattern (this instanceof ...) breaks
> another pattern ( Why first one is deprecated, not
> the second one?
> I mean, I was able to subclass such a class with prototype injection
> without any issues, and it feels more natural in javascript after all.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <>

More information about the es-discuss mailing list