JavaScript Class Privates

One of my aspects of JavaScript that drew me to it as a young developers was that its syntax was loose and I could code quickly. As you gain experience as an engineer, you start to realize that some traditional coding structure is a good thing, even if it slows you down. Using Jest or […]

The post JavaScript Class Privates appeared first on David Walsh Blog.


This content originally appeared on David Walsh Blog and was authored by David Walsh

One of my aspects of JavaScript that drew me to it as a young developers was that its syntax was loose and I could code quickly. As you gain experience as an engineer, you start to realize that some traditional coding structure is a good thing, even if it slows you down. Using Jest or TypeScript to add typing to your JavaScript can save you from maintenance headaches and unexpected errors, for example. While those are pre-compile tools to accomplish structure, we’ve traditionally employed vanilla JavaScript patterns to mock private variables and methods in JavaScript.

Did you know, however, that browsers and the JavaScript language support a specific syntax for creating private variables and functions in classes? Let’s have a look!

Properties and methods on a class have always been considered public; to make a property or method private, add a # at the beginning of their name:

class Developer {
  name;
  #age; // Don't tell anyone my age!

  constructor(name, age) {
    this.name = name;
    this.#age = age;
  }
};

const David = new Developer('David', 38);

console.log(David.name); // David
console.log(David.age);  // undefined
console.log(David.#age); // Error!  Uncaught SyntaxError: Private field '#age' must be declared in an enclosing class

David.name is available because name is public, while age is private because it’s declared with a #. Similarly we can declare a private method with #:

class Developer {
  name;
  #age; // Don't tell anyone my age!

  constructor(name, age) {
    this.name = name;
    this.#age = age;
  }

  #getAgeInDogYears() {
    return this.#age * 7;
  }
};

getAgeInDogYears is only allowed to be called from within the class itself due to being declared with #. We can expose any information from within the class, public or private, if we make it available by public method:

class Developer {
  name = '';
  #age = 0;
  #ageInDogYears = 0;

  constructor(name, age) {
    this.name = name;
    this.#age = age;

    this.#ageInDogYears = this.#getAgeInDogYears();
  }

  #getAgeInDogYears() {
    return this.#age * 7;
  }

  log() {
    console.log(this.name);
    console.log(this.#age);
    console.log(this.#ageInDogYears);
  }
};

const David = new Developer('David', 38);
David.log();

// David
// 38
// 266

Adding a native syntax for declaring private class properties and methods is a welcomed addition to JavaScript; even better is that you can do so by simply adding a # to the beginning of its name.

Have you written code using private syntax in JavaScript? How was the experience?!

The post JavaScript Class Privates appeared first on David Walsh Blog.


This content originally appeared on David Walsh Blog and was authored by David Walsh


Print Share Comment Cite Upload Translate Updates
APA

David Walsh | Sciencx (2022-02-01T10:54:21+00:00) JavaScript Class Privates. Retrieved from https://www.scien.cx/2022/02/01/javascript-class-privates/

MLA
" » JavaScript Class Privates." David Walsh | Sciencx - Tuesday February 1, 2022, https://www.scien.cx/2022/02/01/javascript-class-privates/
HARVARD
David Walsh | Sciencx Tuesday February 1, 2022 » JavaScript Class Privates., viewed ,<https://www.scien.cx/2022/02/01/javascript-class-privates/>
VANCOUVER
David Walsh | Sciencx - » JavaScript Class Privates. [Internet]. [Accessed ]. Available from: https://www.scien.cx/2022/02/01/javascript-class-privates/
CHICAGO
" » JavaScript Class Privates." David Walsh | Sciencx - Accessed . https://www.scien.cx/2022/02/01/javascript-class-privates/
IEEE
" » JavaScript Class Privates." David Walsh | Sciencx [Online]. Available: https://www.scien.cx/2022/02/01/javascript-class-privates/. [Accessed: ]
rf:citation
» JavaScript Class Privates | David Walsh | Sciencx | https://www.scien.cx/2022/02/01/javascript-class-privates/ |

Please log in to upload a file.




There are no updates yet.
Click the Upload button above to add an update.

You must be logged in to translate posts. Please log in or register.