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.

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

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

Regards




On Wed, Aug 20, 2014 at 5:55 PM, Alex Kocharin <[email protected]> wrote:

>
> 20.08.2014, 19:18, "Claude Pache" <[email protected]>:
> > Le 20 août 2014 à 16:56, Alex Kocharin <[email protected]> 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 http://esdiscuss.org/notes/2013-07-25 (search for
> "anti-pattern"), allowing constructors without `new` would break
> subclassing.
>
> Still doesn't make much sense... This pattern (this instanceof ...) breaks
> another pattern (BaseClass.call(this)). 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.
>
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to