W3C home > Mailing lists > Public > public-script-coord@w3.org > October to December 2011

[Bug 14877] Define [[Class]] of interface prototype objects, exception interface objects, and exception interface prototype objects

From: <bugzilla@jessica.w3.org>
Date: Fri, 25 Nov 2011 20:28:44 +0000
To: public-script-coord@w3.org
Message-Id: <E1RU2O4-0006TV-L2@jessica.w3.org>
http://www.w3.org/Bugs/Public/show_bug.cgi?id=14877

--- Comment #18 from Garrett <dhtmlkitchen@gmail.com> 2011-11-25 20:28:44 UTC ---
(In reply to comment #17)
> (In reply to comment #15)
> > No, the Function prototype object is itself a Function object. (sic)
> 
> Ah, I see.  We were using different definitions.  By "is a Function object" I
> meant "is instanceof Function"/"has Function.prototype in its prototype chain",
> while you meant "has [[Class]] 'Function'".  You're quite correct, I
> misunderstood.  Your point is that
> 
>   {}.toString.call(Object.prototype) === "[object Object]"
>   {}.toString.call(Function.prototype) === "[object Function]"
>   {}.toString.call(Boolean.prototype) === "[object Boolean]"
> 
> so for consistency we also want
> 
>   {}.toString.call(NodeList.prototype) === "[object NodeList]"
> 
> and so on -- not NodeListPrototype or Object or whatever.
> 
> That's a really good point, and now that you point it out, I agree.  For
> consistency with ES, we should define the [[Class]] of an interface prototype
> object to be the identifier of the interface, and the [[Class]] of an exception
> interface prototype object to be the identifier of the exception.  The
> [[Class]] of interface objects and exception interface objects should remain
> "Function", as now.  (I was confused in comment 9 when I talked about the
> [[Class]] of exception interface objects not being defined -- it clearly is.)

(In reply to comment #17)
> (In reply to comment #15)
> > No, the Function prototype object is itself a Function object. (sic)

[...]
> That's a really good point, and now that you point it out, I agree.  For
> consistency with ES, we should define the [[Class]] of an interface prototype
> object to be the identifier of the interface, and the [[Class]] of an exception
> interface prototype object to be the identifier of the exception.  The
> [[Class]] of interface objects and exception interface objects should remain
> "Function", as now.  (I was confused in comment 9 when I talked about the
> [[Class]] of exception interface objects not being defined -- it clearly is.)

Doing so would be consistent. 

However in contrast, Brendan advises against other specs using [[Class]] and
that [[Class]] would be going away: "Note that [[Class]] is going away in
ES.next." I provided a link to that in comment 1. Here it is again:
http://lists.w3.org/Archives/Public/public-script-coord/2011OctDec/0110.html

So if [[Class]] is going away, then Brendan or Allen should figure out what
other specs like WebIDL can use to specify the behavior. Taking a step back,
this bug could be renamed to describe the desired behavior instead of the
desired implementation details ([[Class]] is an implementation detail). E.g.
instead of 

"Define [[Class]] of interface prototype objects, exception interface objects,
and exception interface prototype objects"

- change it to define the publicly observable behavior:-

"Define toString of interface prototype objects, exception interface objects,
and exception interface prototype objects."

So as to not rely on specification mechanisms but rather to work with a defined
contract. Or maybe mark the bug as INVALID and start over with a new or refined
bug.

-- 
Configure bugmail: http://www.w3.org/Bugs/Public/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.
Received on Friday, 25 November 2011 20:28:51 UTC

This archive was generated by hypermail 2.3.1 : Wednesday, 8 May 2013 19:30:05 UTC