<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Tue, Apr 28, 2015 at 2:41 PM, Allen Wirfs-Brock <span dir="ltr"><<a href="mailto:allen@wirfs-brock.com" target="_blank">allen@wirfs-brock.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div style="word-wrap:break-word"><div><div>So, ES6 Promises reflect a specific set of design decisions, including a specific definition of "same type" that appears to exist solely for use by Promise.resolve.  All that design guarantees is that the object has an certain specific internal slot whose value is tested in a specific way by Promise.resolve.  It doesn't guarantee that the object is a well-promise or that it has any specific other characteristics that are expected of Foo objects. It's hard to extrapolate from that  specific design to the underlying intent of the designer.</div></div></div></blockquote><div><br></div><div>I think this is exactly my point.  I understand what the original intent was, but the result is (it seems to me) a wart.  `Promise.resolve` now uses its own idiosyncratic definition for "same type" which isn't shared by any other JavaScript objects.  What's more, it's not clear that its idiosyncratic definition actually accomplishes what it was meant to.</div><div><br></div><div>It seems to me that this is an incomplete feature that should have been dropped from the spec.  I apologize for not noticing this sooner.</div><div><br></div><div>Folks who want some sort of "tamper-proof" Promises should probably build them in user-space on top of the other abstractions which are provided.</div><div>  --scott</div><div><br></div><div>ps. I note that `core-js`/`babel` have already implemented the fix I proposed above, of looking at the prototype chain instead of [[PromiseConstructor]]: <a href="https://github.com/zloirock/core-js/blob/v0.9.4/modules/es6.promise.js#L194">https://github.com/zloirock/core-js/blob/v0.9.4/modules/es6.promise.js#L194</a></div><div><br></div></div></div></div>