Interface prototype objects and ES6 @@toStringTag

Kevin Reid kpreid at
Mon May 13 14:12:01 PDT 2013

On Mon, May 13, 2013 at 2:01 PM, Allen Wirfs-Brock <allen at>wrote:

> On May 13, 2013, at 1:50 PM, Erik Arvidsson wrote:
> The way that WebIDL require Object.prototype.toString to return "[object
> TypePrototype]" for the interface prototype object and "[object Type]" for
> the instances seems to imply that every instance needs to have an own
> @@toStringTag.
> If an instance does not have its own @@toStringTag,
> Object.prototype.toString will read through to the [[Prototype]] which
> would return the wrong string.
> Well, toString just does a [[Get]] for @@toStringTag.  You are perfectly
> free to implement it as a get accessor that takes into account whether the
> this value is an instance or a prototype object. Not sure whether the
> complexity is really worth it in most cases. I considered building
> something like that into Object.prototype.toString but it seemed hard to
> justify and there was no (ES) legacy reason for doing so.
> The preferred way to over-ride toString should be via a toString method,
> not via @@toStringTag.

FWIW, oddball implementor's experience:

In Caja's emulated DOM type hierarchy, Node.prototype.toString is an
ordinary method which searches the prototype chain for the appropriate
type-name, including distinguishing prototypes. This seems to work fine
insofar as it gives the answers I want it to give and nobody's ever
complained, and I think it's identical in abilities and effects to your
proposal of an @@toStringTag accessor.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <>

More information about the es-discuss mailing list