Bradley, looks like you have a typo and should be using the `this` argument
you pass to `exec` rather than `this` in the arrow?
```
class B extends A {
constructor() {
super(inst => {
inst.b = 2;
});
}
}
```
On Fri, Mar 18, 2016 at 8:27 AM, Bradley Meck <[email protected]>
wrote:
> In my own code I tend to do the constructor/executor pattern:
>
> ```
> class A {
> constructor(exec) {
> this.a = 1;
> exec(this);
> Object.freeze(this);
> }
> }
> class B extends A {
> constructor() {
> super(() => {
> this.b = 2;
> });
> }
> }
> ```
>
> And it works out pretty well.
>
> On Fri, Mar 18, 2016 at 11:25 AM, kdex <[email protected]> wrote:
>
>> Another way that allowed you to use `new` on both base and derived
>> classes would be something like this:
>>
>> ```js
>> "use strict";
>> function sealInstance(bool) {
>> if (bool) {
>> Object.seal(this);
>> }
>> }
>> class Base {
>> x = 1;
>> constructor(seal = true) {
>> sealInstance(seal);
>> }
>> }
>> class Derived extends Base {
>> y = 2;
>> constructor(seal = true) {
>> super(false);
>> sealInstance(seal);
>> }
>> }
>> let b = new Base(); // Base class can be instantiated with sealing
>> let d = new Derived(); // Derived class can be instantiated with sealing
>> ```
>>
>> Not a particular esthetic way, but it doesn't break `new` and transpiles
>> without private fields.
>> (It will make your constructor signatures a little ugly, though.)
>>
>>
>> On 18.03.2016 16:10, Michael Theriot wrote:
>>
>> Try this... It will only seal if calling new. The subclasses will still
>> need to seal though.
>>
>> ```js
>> class Test {
>> constructor() {
>> this.x = 1;
>> if(new.target === Test) {
>> Object.seal(this);
>> }
>> }
>> }
>> ```
>>
>> On Fri, Mar 18, 2016 at 9:57 AM, Brian Barnes <[email protected]> wrote:
>>
>>> Great, glad to hear that's coming! I think sealing is a fine solution,
>>> it'll do what I want and doesn't cause fits for the engine makers.
>>>
>>> That said, it has one problem -- base classes. You can't seal them
>>> because the constructor in the extended class would fail (I tried it) and
>>> so the base classes would always have to remain unsealed which means you
>>> either (1) understand that or (2) always use an extended class if you care
>>> for level of code safety.
>>>
>>> [>] Brian
>>>
>>>
>>> On 3/18/2016 11:50 AM, kdex wrote:
>>>
>>>> Brian, Your first example isn't too far from ES2017. Leave away the
>>>> `let`s and seal it, and you got:
>>>>
>>>> ```js
>>>> "use strict";
>>>> class Test {
>>>> x = 1;
>>>> y = 2;
>>>> constructor() {
>>>> Object.seal(this);
>>>> this.z = 3; // TypeError
>>>> }
>>>> }
>>>> ```
>>>> You can already use this using transpilers (at least babel supports it).
>>>>
>>>> On 18.03.2016 15:39, Brian Barnes wrote:
>>>>
>>>>> Ugh, well, I guess I typed a lot of stuff for nothing! And by the
>>>>> look of their experiment, what I wanted was actually one of the major
>>>>> blockers.
>>>>>
>>>>> It seems classes will really need a more standard type of syntax (non
>>>>> static) before you could actually achieve this, and might be a bridge
>>>>> too far for javascript:
>>>>>
>>>>> class test
>>>>> {
>>>>> let x=1;
>>>>> let y=2;
>>>>> constructor() {}
>>>>> func() { this.z=2; } // syntax error
>>>>> }
>>>>>
>>>>> Though it could be kind of faked by some kind of reverse hoisting,
>>>>> i.e., rebuilding the code inside the engine:
>>>>>
>>>>> class test
>>>>> {
>>>>> constructor()
>>>>> {
>>>>> this.x=1;
>>>>> this.y=2;
>>>>> // stuff that was in the constructor
>>>>> Object.seal(this);
>>>>> }
>>>>> ...
>>>>> }
>>>>>
>>>>> [>] Brian
>>>>>
>>>>> On 3/18/2016 10:04 AM, Sébastien Doeraene wrote:
>>>>>
>>>>>> Hi,
>>>>>>
>>>>>> The Strong Mode experiment was canceled:
>>>>>> https://groups.google.com/forum/#!topic/strengthen-js/ojj3TDxbHpQ
>>>>>>
>>>>>> Cheers,
>>>>>> Sébastien
>>>>>>
>>>>>> On Fri, Mar 18, 2016 at 3:59 PM, kdex < <[email protected]>[email protected]
>>>>>> <mailto:[email protected]>> wrote:
>>>>>>
>>>>>> Already considered and to be implemented via strong mode IIRC.
>>>>>>
>>>>>> On 18.03.2016 14:36, Brian Barnes wrote:
>>>>>>
>>>>>> I know properties on classes are getting a look over for the
>>>>>> next iteration (last I checked) and I understand javascript is
>>>>>> obviously a different language then other oo languages with a
>>>>>> different foundation, but I bring this up for it's usage in
>>>>>> producing stricter code that reduces errors and is easier to
>>>>>> analyze. A vote for this if anybody considered it!
>>>>>>
>>>>>> class Test
>>>>>> {
>>>>>>
>>>>>> constructor()
>>>>>> {
>>>>>> this.x=1;
>>>>>> }
>>>>>>
>>>>>> func1()
>>>>>> {
>>>>>> this.y=2;
>>>>>> }
>>>>>>
>>>>>> func2()
>>>>>> {
>>>>>> console.log(this.x+','+this.y);
>>>>>> }
>>>>>> }
>>>>>>
>>>>>> var test1=new Test();
>>>>>> test1.func1();
>>>>>> test2.func2(); // outputs 1,2
>>>>>>
>>>>>> var test2=new Test();
>>>>>> test2.func(); // outputs 1,undefined
>>>>>>
>>>>>> I know classes contents are meant to be in strict mode, and I
>>>>>> thinking that only allowing properties to be created in the
>>>>>> constructor (or eventually static properties on the class
>>>>>> itself) would make a system less prone to the conditions like
>>>>>> you see above. Basically, func1() would produce a error when
>>>>>> run.
>>>>>>
>>>>>> I can see why this type of initialization of properties could
>>>>>> be
>>>>>> desired, though, especially as it reflect the way it would
>>>>>> have
>>>>>> worked if you used a function instead of a class.
>>>>>>
>>>>>> [>] Brian
>>>>>> _______________________________________________
>>>>>> es-discuss mailing list
>>>>>> [email protected] <mailto:[email protected]>
>>>>>> https://mail.mozilla.org/listinfo/es-discuss
>>>>>>
>>>>>>
>>>>>> _______________________________________________
>>>>>> es-discuss mailing list
>>>>>> [email protected] <mailto:[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
>>>>>
>>>>
>>>> _______________________________________________
>>>> 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
>> [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
>
>
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss