Feedback on Subclassing" Built-in Constructors

David Bruant bruant.d at
Thu Jun 21 08:48:59 PDT 2012


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) 

     class MyDate extends Date {
        constructor(...args) {
           // |this| has no internal date property
           // 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 {
             // |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.



More information about the es-discuss mailing list