The following should work, and it would mean that we can provide much better functionality:
class Foo {
# x = 5
test() {
console.log(this .# x) // it should work, but it doesn't
}
}
It didn't work in Chrome (I am doubting it is a bug in Chrome, and that is it working as spec'd, which throws a syntax error).
Looks like the #foo is treated as a name, which is what makes things like indexed-access not currently possible (or so it seems).
If we change the semantics so that .# is an operator (f.e. it means "access a private property, of which the name follows"), and can be separated by spaces just like with public access using ., then we can accommodate other features like indexed access in a way that makes sense:
const propName = 'bar'
class Foo {
foo = 3
# foo = 4
[# propName ] = 5
test() {
console.log(this . foo) // it works, 3
console.log(this .# foo) // it should work, 4
console.log(this[#'foo']) // it should work, 4
console.log(this [# 'foo' ]) // it should work, 4
console.log(this .# bar) // it should work, 5
console.log(this [# propName ]) // it should work, 5
}
}
because now the syntax is tied to the type of access you want to attempt, not tied to the name of the field.
The following should work, and it would mean that we can provide much better functionality:
It didn't work in Chrome (I am doubting it is a bug in Chrome, and that is it working as spec'd, which throws a syntax error).
Looks like the
#foois treated as a name, which is what makes things like indexed-access not currently possible (or so it seems).If we change the semantics so that
.#is an operator (f.e. it means "access a private property, of which the name follows"), and can be separated by spaces just like with public access using., then we can accommodate other features like indexed access in a way that makes sense:because now the syntax is tied to the type of access you want to attempt, not tied to the name of the field.