Not convincing. When you add a new feature, you can change the parser. So internally, you could rewrite every usage of this.x to this.#x (or anything else) upon reading it.
Edit: wrt encapsulation, will the proposed solution work when a class marks the same field private as the one it extends?
Breaking this.x being equivalent to this['x'], and making this.x quietly change its meaning depending on where the function containing it is located and on the presence or absence of a private field with a corresponding name, seems confusing.
https://github.com/tc39/proposal-private-fields/blob/master/...