Meanwhile get supported, visibility rules are just based on a common naming convention where properties and methods get prefixed with the underscore character _ if they are private.
class Customer {
constructor(firstName, lastName) {
this.firstName = firstName;
}
get firstName() {
return this._firstName;
}
set firstName(value) {
this._firstName = value;
}
}
/* @HACK: Last time we use var, I promise! */
var customer = new Customer();
customer.firstName = 'Foo';
console.log(customer.firstName); // Foo
Avoid using properties.
Properties can become handy in some extreme cases like the integration of some legacy library, mock, implementing a runtime type checking decorator or something fancy like that etc...
Otherwise, properties will only introduce ambiguity.
Who would imagine that this code might trigger a runtime exception?
var customer = new Customer();
element.textContent = customer.name;
Or even worse, things might end up like this:
/* @HACK: Do not remove this useless line as it initializes
* the user eagerly instead of running it lazily. */
request.user;
Meanwhile we get the class fields in JavaScript, it is recommended to initialize all the attributes in the constructor. Otherwise, it's hard to figure out which attributes are available on a class. In addition to this, the available attributes will depend on the methods that have been called.