On 10/31/11 9:32 PM, Charles Pritchard wrote:
Structured cloning fails for NodeList, same as postMessage, because of
circular structure.

What circular structure?  Structured clone can handle that.

It fails because it's a host object (based on its [[Class]]) that's not whitelisted in the structured clone algorithm.

With .join, you get the .toString of the DOM Nodes.

Yes, as you would for an array of DOM nodes.

A quick skim through the ES spec shows that Array.prototype.concat also considers the [[Class]] of its arguments, by the way. And indeed, this testcase:

  <script>
    var l = document.getElementsByTagName("html");
    var a = Array.prototype.slice.call(l);
    l.__proto__.__proto__ = Array.prototype;
    var test1 = [].concat(l);
    var test2 = [].concat(a);
    alert(test1[0] instanceof HTMLHtmlElement);
    alert(test2[0] instanceof HTMLHtmlElement);
  </script>

alerts "false" followed by "true" in UAs.

So we really do need to decide what it means for a return value to "be an Array". For example, how does it behave with concat()?

-Boris

Reply via email to