Re: EcmaScript Proposal – Private methods and fields proposals.

Waldemar Horwat waldemar at google.com
Fri Apr 27 23:06:27 UTC 2018


On 04/17/2018 05:31 PM, Sultan wrote:
>>Do you limit classes to creating only the private fields declared in the class, or can they create arbitrarily named ones?
> 
> Yes, just as you could write arbitrary named fields with the mentioned WeakMap approach, for example –
> 
> [...] private[key] = value
> [...] private(this)[key] = value
> [...] registry.get(this)[key] = value
> 
> and retrieve arbitrary fields
> 
> [...]private[key]
> [...]private(this)[key]
> [...]registry.get(this)[key]
> 
>>The full form is expr.#foo, where expr can be `this` or some other expression appropriate in front of a dot. The #foo binds to the innermost enclosing class that has a private field called foo. If expr doesn't evaluate to an instance of that class, you fail and throw.
> 
> Is this what you meant?
> 
> class A {
>    #foo = 1
>    constructor() {
>      let self = this
> 
>      this.B = class B {
>        constructor() {
>          self.#foo = 2
>        }
>      }
>    }
>    get() {
>      return this.#foo
>    }
>    run(program) {
>      return eval(program)
>    }
> }
> 
> let a = new A()
> let b = new instance.B()

What's instance?  I assume you meant new a.B().

> Would this return 1 or 2 or would the previous statement throw?
> 
> console.log(a.get())

This would produce 2.

> Additionally would this work
> 
> a.run('this.#foo = 3')

I have no idea.  It depends on how the details of the scope rules for private would work.

     Waldemar


More information about the es-discuss mailing list