- From: <bugzilla@jessica.w3.org>
- Date: Thu, 15 Dec 2011 06:04:40 +0000
- To: public-script-coord@w3.org
https://www.w3.org/Bugs/Public/show_bug.cgi?id=14877
--- Comment #21 from Cameron McCormack <cam@mcc.id.au> 2011-12-15 06:04:36 UTC ---
Here's a test expanding on Aryeh's comment 0 tests for
Object.prototype.toString() and String() on Node, Node.prototype, NodeList,
NodeList.prototype and Image:
http://people.mozilla.org/~cmccormack/tests/constructor-class.html
I agree with Aryeh that choosing ({}).toString.call(Node.prototype) == "[object
Node]" is best, since that allows for the debugging that Travis wants as well
as being consistent with ES builtins as Garrett points out.
Do people think there's much advantage to having String(Node) == "function
Node() { ... }", now that interface objects are function objects? It would be
consistent with the builtin constructors like Object, String, etc. OTOH
"[object Node]" is a slight winner from the results.
So my preferred proposal is to make:
1. ({}).toString.call(Node) == "[object Node]"
2. String(Node) == "[object Node]"
3. ({}).toString.call(Node.prototype) == "[object Node]"
4. String(Node.prototype) == "[object Node]"
5. ({}).toString.call(Image) == "[object Image]"
6. String(Image) == "[object Image]"
but I would also be OK with this, if there are no compat issues:
1. ({}).toString.call(Node) == "[object Node]"
2. String(Node) == "function Node() { ... }"
3. ({}).toString.call(Node.prototype) == "[object Node]"
4. String(Node.prototype) == "[object Node]"
5. ({}).toString.call(Image) == "[object Image]"
6. String(Image) == "function Image() { ... }"
For (2), (4) and (6), we'd need to have toString functions on interface objects
to override the one from Function.prototype.
Results from the test:
Node
====
{}.toString.call() String()
-----------------------------------------------------------------
Fx [object DOMPrototype] [object Node]
Cr [object Function] function Node() { [native code] }
Sa [object NodeConstructor] [object NodeConstructor]
Op [object Node] [object Node]
IE [object Node] [object Node]
Node.prototype
==============
{}.toString.call() String()
-----------------------------------------------------------------
Fx [object DOM Constructor.prototype] [object Node]
Cr [object Object] [object Object]
Sa [object NodePrototype] [object NodePrototype]
Op [object NodePrototype] [object NodePrototype]
IE [object NodePrototype] [object NodePrototype]
NodeList
========
{}.toString.call() String()
-----------------------------------------------------------------
Fx [object NodeList] [object NodeList]
... rest as for Node ...
NodeList.prototype
==================
{}.toString.call() String()
-----------------------------------------------------------------
Fx [object Object] [object Object]
... rest as for Node.prototype ...
Image
=====
{}.toString.call() String()
-----------------------------------------------------------------
Fx [object DOMConstructor] [object Image]
Cr [object Function] [object Function]
Sa [object ImageConstructor] [object ImageConstructor]
Op [object Image] function Image() { [native code] }
IE [object Function] function Image() { [native code] }
And this is what the spec currently says to do:
{}.toString.call() String()
----------------------------------------------------------------------------
Node [object Node] function Node() { ... }
Node.prototype [object Object] [object Object]
Image [object Function] function Image() { ... }
--
Configure bugmail: https://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 Thursday, 15 December 2011 06:04:45 UTC