W3C home > Mailing lists > Public > public-script-coord@w3.org > April to June 2013

Re: Interface prototype objects and ES6 @@toStringTag

From: Erik Arvidsson <erik.arvidsson@gmail.com>
Date: Mon, 13 May 2013 17:16:17 -0400
Message-ID: <CAJ8+Gogzsgr4Quw-SVvKwJX7y5LsaeSG+fWL8DHzLrvaCfrj=Q@mail.gmail.com>
To: Allen Wirfs-Brock <allen@wirfs-brock.com>
Cc: "public-script-coord@w3.org" <public-script-coord@w3.org>, es-discuss <es-discuss@mozilla.org>
On Mon, May 13, 2013 at 5:01 PM, Allen Wirfs-Brock <allen@wirfs-brock.com>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.
> http://people.mozilla.org/~jorendorff/es6-draft.html#sec-
> http://dev.w3.org/2006/webapi/WebIDL/#es-environment
> 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.

OK. Something like this might work:

Object.defineProperty(Type.prototype, @@toStringTag, {
  get: function() {
    return 'Type' + (this === Type.prototype ? 'Prototype' : '');

This is of course observable if we expose @@toStringTag.

The preferred way to over-ride toString should be via a toString method,
> not via @@toStringTag.

Agreed, but WebIDL currently mandates the result of

Received on Monday, 13 May 2013 21:17:05 UTC

This archive was generated by hypermail 2.4.0 : Friday, 17 January 2020 17:14:13 UTC