On Fri, Nov 16, 2018 at 8:42 PM Sultan
<[email protected]> wrote:
> It has an added reach in usefulness when you consider nested
> classes:
>
> class A {
> foo() {
> return class B {
> bar() => {
> return this // refers to instance A
> }
> }
> }
> }
>
> This is not possible today without creating a self-like variable
> for bar to reference A's instance; Which is one of the points
> arrow functions addressed.
It is, just not within the `class` construct:
```js
class A {
foo() {
class B {
}
B.prototype.bar = () => {
return this; // refers to instance A
};
return B;
}
}
```
I agree with Tab Atkins Jr.: In your nested classes example, I'd expect
`this` within `bar` to be the `B` instance, not the `A` instance. I think
the more natural definition of that syntax (if it were adopted) would be a
prototype function that is effectively auto-bound to the instance at
construction time, like this common pattern today:
```js
class B {
constructor() {
this.bar = this.bar.bind(this);
}
bar() {
return this;
}
}
```
In fact I could see some benefit to that syntax, since people use class
fields for that use-case which can make mocking difficult.
But I'm not keen on that syntax with the semantics you're proposing.
-- T.J. Crowder
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss