Promise() vs. new Promise()

C. Scott Ananian ecmascript at cscott.net
Thu Aug 21 08:51:44 PDT 2014


On Thu, Aug 21, 2014 at 3:22 AM, Salvador de la Puente González
<salva at unoyunodiez.com> wrote:
> 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);`?

Not true.  See, for example:

https://github.com/paulmillr/es6-shim/issues/170#issuecomment-34528376
https://github.com/paulmillr/es6-shim/blob/master/test/promise/subclass.js#L5
https://github.com/cscott/prfun/blob/master/lib/index.js#L520

It's super-annoying, but you can actually write ES5 code that will
properly inherit the new internal slots in ES6.

I'm a big fan of `Function.prototype.new`, though.  And I think
`Promise.new.bind(Promise)` is not all that terrible, if you want to
pass around a constructor as a function.  (And there's another
es-discuss thread about trying to unify `new` as an "ordinary"
function call in proxies as well.)

  --scott


More information about the es-discuss mailing list