Determining if an object can be constructed

Isiah Meadows isiahmeadows at
Thu Jan 19 12:18:47 UTC 2017


On Thu, Jan 19, 2017, 03:26 Claude Pache <claude.pache at> wrote:

> Le 17 janv. 2017 à 23:48, Isiah Meadows <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.

Sorry for the poor phrasing there.

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

More information about the es-discuss mailing list