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

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