Determining if an object can be constructed

Claude Pache claude.pache at
Thu Jan 19 14:05:05 UTC 2017

> Le 19 janv. 2017 à 13:18, Isiah Meadows <isiahmeadows at> a écrit :
> Inline.
> On Thu, Jan 19, 2017, 03:26 Claude Pache <claude.pache at <mailto:claude.pache at>> wrote:
>> Le 17 janv. 2017 à 23:48, Isiah Meadows <isiahmeadows at <mailto:isiahmeadows at>> a écrit :
>> Out of curiosity, why are classes specified to have a [[Call]] internal method instead of special-casing `typeof` and friends to work with them? Somewhat of a tangent, but just a curious question on the design decision.
> I guess that class constructors could have been specified without a [[Call]] internal method, with the cost of amending all the places where “constructible” implicitly implies “callable”.
> FWIW, calling methods that don't have [[Call]] already throws a TypeError. So it wouldn't affect necessarily all sites, especially if you continue to check for [[Call]] in `Array.prototype.forEach` (like what is currently done), etc.
> But why (and how) do you need “special-casing `typeof` and friends”? (The way the question is formulated, avoiding special-casing would be an argument for the current design. But I miss what are the special cases you have in mind, especially regarding `typeof`.)
> I was specifically referring to `typeof (class {}) === "function"`. The "and friends" was in reference to things like the callback in `Array.prototype.forEach`, which IIUC doesn't currently throw for classes if the array has no members.

If you intend to have no observable difference, I don’t see the point to spec it another way just for introducing special cases here and there.

About typeof. If you insist that a class has no [[Call]] internal method, I think that `typeof class {}` must *not* be `"function"`. I have heard complaints that classes look like callable objects, but are not usable as callable objects in practice. It would not be nice to maintain that gotcha by an explicit special case.

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <>

More information about the es-discuss mailing list