<div dir="ltr"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc 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.<br></div></div></div></blockquote><div><br></div><div>I don't see any rational intent for the current design other than:</div><div><br></div><div>Only return x if x was **constructed** by C.</div><div><br></div><div>The current semantic is:</div><div><br></div><div>Only return x if x was constructed by C, or any code with a reference to C arbitrarily chose that it should appear to have been constructed by C.</div><div><br></div><div>Allowing an object to pass a nominal type test for a constructor, where the object was not initialized by that constructor seems bad.</div><div><br></div><div>What is the use case for third argument to Reflect.construct?</div></div></div>