<div dir="ltr">The only problem I see here is you can not emulate completely `new` with ES. Why Promise add some internal slots when called with new and it does not make the same when writing `var p = Object.create(Promise.prototype); Promise.call(p, fn);`?<br>

</div><div class="gmail_extra"><br><br><div class="gmail_quote">On Thu, Aug 21, 2014 at 5:18 AM, Andrea Giammarchi <span dir="ltr"><<a href="mailto:andrea.giammarchi@gmail.com" target="_blank">andrea.giammarchi@gmail.com</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">To this I'd like to add that in ES6 you don't need to explicitly invoke inherited class constructor but rather use `super`<div>

<br></div><div>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.</div>


<div><br></div><div>Although there's nothing for mixins or their initialization in ES6 so it's OKish ... </div><div><br></div><div>Last, but not least, since you use instanceof, I'd like to underline in ES5 capable browser you have another pattern.</div>


<div><br></div><div>```js</div><div>function SelfInstance() {'use strict';</div><div>  return this || new SelfInstance;</div><div>}</div><div>```</div><div><br></div><div>no need to use the `instanceof` check when `this` could be undefined ^_^</div>


<div><br></div><div>Regards</div><div><br></div><div><br></div></div><div class="HOEnZb"><div class="h5"><div class="gmail_extra"><br><br><div class="gmail_quote">On Wed, Aug 20, 2014 at 5:55 PM, Alex Kocharin <span dir="ltr"><<a href="mailto:alex@kocharin.ru" target="_blank">alex@kocharin.ru</a>></span> wrote:<br>


<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br>
20.08.2014, 19:18, "Claude Pache" <<a href="mailto:claude.pache@gmail.com" target="_blank">claude.pache@gmail.com</a>>:<br>
<div><div>> Le 20 août 2014 à 16:56, Alex Kocharin <<a href="mailto:alex@kocharin.ru" target="_blank">alex@kocharin.ru</a>> a écrit :<br>
>>  But... why?<br>
>><br>
>>  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.<br>



>><br>
>>  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.<br>
>><br>
>>  Why make people use it?<br>
><br>
> According to <a href="http://esdiscuss.org/notes/2013-07-25" target="_blank">http://esdiscuss.org/notes/2013-07-25</a> (search for "anti-pattern"), allowing constructors without `new` would break subclassing.<br>



<br>
</div></div>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?<br>
<br>
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.<br>
</blockquote></div><br></div>
</div></div><br>_______________________________________________<br>
es-discuss mailing list<br>
<a href="mailto:es-discuss@mozilla.org">es-discuss@mozilla.org</a><br>
<a href="https://mail.mozilla.org/listinfo/es-discuss" target="_blank">https://mail.mozilla.org/listinfo/es-discuss</a><br>
<br></blockquote></div><br></div>