> I feel ES classes are overly restrictive in preventing
> this, since it basically forces you to force subclasses to do
> something like `this.init()` right after the class is allocated,
> leaking implementation details left and right.

its not a design-flaw.  the flaw is you trying to shoehorn “classical” 
inheritance-based design-patterns on a language better suited to use 
static-functions to baton-pass json-data (over class-instance).

here’s a real-world example of a ```dbTableCreateOne``` static-function to 
initialize a mongo-like collection/table, and then sync it with indexeddb 
persistence-store [1].  imagine how much more difficult these [common-case] 
async-initializations would be using inheritance-based constructors.

```javascript
local.dbTableCreateOne = function (options, onError) {
/*
 * this function will create a dbTable with the given options
 */
    var self;
    options = local.objectSetOverride(options);
    // register dbTable
    self = local.dbTableDict[options.name] =
        local.dbTableDict[options.name] || new local._DbTable(options);
    ...
    // restore dbTable from persistent-storage
    self.isLoaded = self.isLoaded || options.isLoaded;
    if (!self.isLoaded) {
        local.storageGetItem('dbTable.' + self.name + '.json', function (error, 
data) {
            // validate no error occurred
            local.assert(!error, error);
            if (!self.isLoaded) {
                local.dbImport(data);
            }
            self.isLoaded = true;
            local.setTimeoutOnError(onError, 0, null, self);
        });
        return self;
    }
    return local.setTimeoutOnError(onError, 0, null, self);
};
```

p.s. - going off-topic, but above-mentioned code/library (as well as proposals 
for standard tree/stl libraries) shouldn’t even exist if javascript had a 
builtin/standard sqlite3 library (like python).

[1] initialize a db-table and sync it with persistence-store
https://github.com/kaizhu256/node-db-lite/blob/2018.4.23/lib.db.js#L1861 
<https://github.com/kaizhu256/node-db-lite/blob/2018.4.23/lib.db.js#L1861>

[2] discuss including tree and stl in proposed standard-library
https://github.com/tc39/proposal-javascript-standard-library/issues/16#issuecomment-457833409
 
<https://github.com/tc39/proposal-javascript-standard-library/issues/16#issuecomment-457833409>
https://github.com/tc39/proposal-javascript-standard-library/issues/16#issuecomment-461285304
 
<https://github.com/tc39/proposal-javascript-standard-library/issues/16#issuecomment-461285304>
> On 9 Feb 2019, at 4:18 AM, Isiah Meadows <[email protected]> wrote:
> 
> I've also had *several* scenarios where I could've used this
> personally. I feel ES classes are overly restrictive in preventing
> this, since it basically forces you to force subclasses to do
> something like `this.init()` right after the class is allocated,
> leaking implementation details left and right.
> 
> -----
> 
> Isiah Meadows
> [email protected]
> www.isiahmeadows.com
> 
> On Fri, Feb 8, 2019 at 1:22 AM #!/JoePea <[email protected]> wrote:
>> 
>> I many times find myself in cases where a base class wants to ensure that 
>> logic is always fired after the current method's execution, so that for 
>> example no matter in which order sub classes call the `super` method, the 
>> `super` method can still guarantee that logic fires after the whole stack of 
>> the same method in the class hierarchy.
>> 
>> So what I can do now is use `Promise.resolve().then(() => { ... })` to 
>> schedule that logic for later, that way all the invocations of a `foo` 
>> method along the class hierarchy have all fired. But this means that other 
>> code can also fire before the next microtask.
>> 
>> Is there some way to do it? If not, I wonder if some language feature for 
>> doing it would be possible?
>> 
>> - Joe
>> _______________________________________________
>> es-discuss mailing list
>> [email protected]
>> https://mail.mozilla.org/listinfo/es-discuss
> _______________________________________________
> es-discuss mailing list
> [email protected]
> https://mail.mozilla.org/listinfo/es-discuss

_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to