This repository was archived by the owner on Jan 25, 2022. It is now read-only.
This repository was archived by the owner on Jan 25, 2022. It is now read-only.
Treating the #
as part of a .#
operator instead of as part of a field name #foo
. #250
Open
Description
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.
Metadata
Metadata
Assignees
Labels
No labels