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