- 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