Hi,

I have read the recent "Subclassing" Built-in Constructors" page [1] and I have some feedback. This page exhibits a distinction that wasn't clear in my mind before reading it: some internal properties can be added lazily like the ones for dates while some (essential internal methods) cannot.

    class MyDate extends Date {
       constructor(...args) {
          // |this| has no internal date property
          super();
// now it does have them and can be considered as a date object, [[NativeBrand]] aside
       }
    }

For constructor of objects that only add internal data properties and additional internal method (like RegExps [[Match]]), this can work fine. However, for objects with different essential internal methods, it cannot work.

    class MyArray extends Array {
        constructor(...args){
            // |this| not an array until i've called super(), right?
            'length' in this; // false
            this[2] = "yo";
this.length = 1; // ? I guess nothing happens except that |this| has a new 'length' property? super(); // If nothing serious happens, the array invariant is broken.
            this[2] // ?
            this.length // ?
        }
    }

I don't think there is a way out unless |this| is already an array in which case 'super' is useless.

David

[1] http://wiki.ecmascript.org/doku.php?id=strawman:subclassable-builtins
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to