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

[WebIDL] Should stringifiers use [[Get]] and [[Call]] or call the canonical getter/function?

From: Boris Zbarsky <bzbarsky@MIT.EDU>
Date: Fri, 05 Oct 2012 15:47:10 -0400
Message-ID: <506F393E.3090400@mit.edu>
To: public-script-coord@w3.org
Right now the spec says that given this:

   [Constructor(DOMString arg)]
   interface Foo {
     stringifier DOMString myString(); // always returns the argument
                                       // passed to the constructor
   }

and this JS:

   var foo = new Foo("abc");
   alert(foo);
   Foo.prototype.myString = function() { return "xyz"; }
   alert(foo);

the two alerts will show "abc" and "xyz" respectively.  Furthermore this JS:

   var foo = new Foo("abc");
   Object.defineProperty(foo, "myString",
                         { get: function() { throw "FAIL"; } })
   alert(foo);

will throw an exception.

This seems pretty unexpected to me.  I would expect the behavior of 
toString() to not be affected by changes to the myString property of the 
object (or even the prototype); instead it seems like it should call the 
canonical myString...

Thoughts?

And in particular, the way the spec is phrased right now means that this 
bit of WebIDL from HTMLAnchorElement:

     stringifier attribute DOMString href;

does not have the same behavior as this bit would:

    attribute DOMString href;
    stringifier DOMString();

with prose defining DOMString to do the same thing as the href getter.

-Boris
Received on Friday, 5 October 2012 19:47:37 UTC

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