On Sat, 25 Aug 2018 at 00:35, Logan Smyth <loganfsm...@gmail.com> wrote:

> Generally if something is required during construction, it would be best
> to pass it down as part of the constructor options. For example, you could
> do
> ```
> class Base {
>   constructor({ idAttribute = "id"}) {
>     this.idAttribute = idAttribute;
>   }
> }
>
> class Derived extends Base {
>   constructor() {
>     super({
>       idAttribute: '_id'
>     });
>   }
> }
> ```
>

I had derived a simular solution.


> I don't think class fields would be a good way to conceptually do this
> kind of thing.
>

It was neat for what I wanted to do.

>
>
> On Fri, Aug 24, 2018 at 2:56 PM, Aaron Gray <aaronngray.li...@gmail.com>
> wrote:
>
>> Yeah it does look like its badly "broken by design".
>>
>> On Fri, 24 Aug 2018 at 22:13, Jordan Harband <ljh...@gmail.com> wrote:
>>
>>> I'm afraid that still wouldn't solve the problem; the superclass's code
>>> is all 100% completed before the subclass has `this` available.
>>>
>>> On Fri, Aug 24, 2018 at 1:52 PM, Ranando King <king...@gmail.com> wrote:
>>>
>>>> Aaron, congratulations! You just tripped over a new reason for me to
>>>> revive issue #123. The only way to get that to work is to have the default
>>>> values on the prototype. The problem comes because `this` doesn't even have
>>>> a value until the last call to `super()` returns. If a `class` doesn't have
>>>> a base `class` it essentially has Object as a base `class` and `super` is
>>>> implicitly called. So unless the default public field values are on the
>>>> prototype, there's literally no way to have them initialized before the
>>>> base classes are initialized.
>>>>
>>>> On Fri, Aug 24, 2018 at 3:15 PM Aaron Gray <aaronngray.li...@gmail.com>
>>>> wrote:
>>>>
>>>>> I am having an issue with order semantics regarding
>>>>> https://github.com/tc39/proposal-class-fields with derived classes
>>>>> defining or overriding data member values that are used in the base class
>>>>> constructor for initialization of properties of the class.
>>>>>
>>>>> This means the Super Class / Base Class'es constructor does not yet
>>>>> have access to the default field values of the derived class it is
>>>>> initiating.
>>>>>
>>>>>     class Base {
>>>>>         constructor() {
>>>>>              ....
>>>>>              .. idAttribute ..
>>>>>              ....
>>>>>         }
>>>>>         idAttribute = 'id';
>>>>>     }
>>>>>    class Derived extends Base {
>>>>>         constructor() {
>>>>>              super();
>>>>>              ....
>>>>>         }
>>>>>         idAttribute = '_id';
>>>>>    }
>>>>>
>>>>> All would mean having a separate initialize() function, but even this
>>>>> solution is flawed when there is a third level in the hierarchy. And as
>>>>> super() is required it means there seems to be no way round this issue. 
>>>>> The
>>>>> only way I can see is some form of override keyword ?
>>>>>
>>>>>
>>>>> Has anyone got any solutions to this issue or work arounds ?
>>>>> --
>>>>> Aaron Gray
>>>>>
>>>>> Independent Open Source Software Engineer, Computer Language
>>>>> Researcher, Information Theorist, and amateur computer scientist.
>>>>> _______________________________________________
>>>>> es-discuss mailing list
>>>>> es-discuss@mozilla.org
>>>>> https://mail.mozilla.org/listinfo/es-discuss
>>>>>
>>>>
>>>> _______________________________________________
>>>> es-discuss mailing list
>>>> es-discuss@mozilla.org
>>>> https://mail.mozilla.org/listinfo/es-discuss
>>>>
>>>>
>>>
>>
>> --
>> Aaron Gray
>>
>> Independent Open Source Software Engineer, Computer Language Researcher,
>> Information Theorist, and amateur computer scientist.
>>
>> _______________________________________________
>> es-discuss mailing list
>> es-discuss@mozilla.org
>> https://mail.mozilla.org/listinfo/es-discuss
>>
>>
>

-- 
Aaron Gray

Independent Open Source Software Engineer, Computer Language Researcher,
Information Theorist, and amateur computer scientist.
_______________________________________________
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to