Learning JavaScript? Download my free JavaScript Handbook 🔥

Before the introduction of private class fields, we could not really enforce private properties on a class. We used conventions instead, maybe using _ as an hint that the field is private, like this:

class Counter {
  _count = 0

  increment() {
    this._count++
  }
}

But we could access the count using

const counter = new Counter()
counter._count

We can now use private class fields that enforce private fields:

class Counter {
  #count = 0

  increment() {
    this.#count++
  }
}

We now can’t access this value from the outside. Trying to access it will raise a syntax error.

This is part of the new class fields proposal, which you can use since Chrome 72 and Node 12.

Edit this page


Here's my latest YouTube video. I talk about why I think that dogs are a great help for developers working remotely: