W3C home > Mailing lists > Public > public-script-coord@w3.org > July to September 2013

Re: How to specify an object that can be mutable or immutable

From: Rick Waldron <waldron.rick@gmail.com>
Date: Thu, 26 Sep 2013 17:22:18 -0400
Message-ID: <CAHfnhfovTLM-L=Vmyqa2d1-wDHtQaGNbKwnwTSCztXVdB_h8xg@mail.gmail.com>
To: Boris Zbarsky <bzbarsky@mit.edu>
Cc: "public-script-coord@w3.org" <public-script-coord@w3.org>
On Thu, Sep 26, 2013 at 11:13 AM, Boris Zbarsky <bzbarsky@mit.edu> wrote:

> On 9/26/13 8:15 AM, Domenic Denicola wrote:
>
>> Can somebody spell out how this proposed inheritance hierarchy works in
>> actual ECMAScript, not WebIDL?
>>
>
> In ES5 (because I'm not up to date on ES6 class syntax), and ignoring the
> .constructor hookups and whatnot:
>
> function DOMRectReadonly() {
>   // Some stuff here
> }
> DOMRectReadonly.prototype = Object.create(Object.**prototype,
> {
>   left: {
>     get: function left() {
>            // stuff here
>          }
>   }
>   // more members
> };
>

Or just:

DOMRectReadonly.prototype = {
  get left() {
    return 0;
  }
};



>
>
> function DOMRect() {
>   // Some stuff here
> }
> DOMRect.__proto__ = DOMRectReadonly;
> DOMRectReadonly.prototype = Object.create(DOMRectReadonly.**prototype,
> {
>   left: {
>     get: function left() {
>            // stuff here, which is a copy-paste of the getter on
>            // DOMRectReadonly.prototype, or an invocation of the
>            // canonical version of that getter.
>          },
>     set: function set_left(arg) {
>            // stuff here
>          }
>   }
>   // more members
> }
>
> I _think_ in terms of ES6 classes this would be:
>
> class DOMRectReadonly {
>   get left() {
>     // stuff here
>   }
> }
>
> class DOMRect extends DOMRectReadonly {
>   get left() {
>     // stuff here
>   }
>   set left(arg) {
>     // stuff here
>   }
> }
>

Just to confirm, this is correct and produces equivalent class/constructor
objects as are created in your ES5 example.

Rick
Received on Thursday, 26 September 2013 21:23:04 UTC

This archive was generated by hypermail 2.3.1 : Tuesday, 6 January 2015 21:37:50 UTC