Soukromé třídy JavaScriptu

Jedním z mých aspektů JavaScriptu, který mě k němu jako mladého vývojáře přitahoval, bylo, že jeho syntaxe byla volná a mohl jsem rychle kódovat. Jak získáváte zkušenosti jako inženýr, začnete si uvědomovat, že nějaká tradiční struktura kódování je dobrá věc, i když vás zpomaluje. Použití Jest nebo TypeScript k přidání psaní do vašeho JavaScriptu vás může ušetřit například starostí s údržbou a neočekávanými chybami. I když se jedná o předkompilační nástroje k dosažení struktury, tradičně používáme vanilkové vzory JavaScriptu k zesměšňování soukromých proměnných a metod v JavaScriptu.

Věděli jste však, že prohlížeče a jazyk JavaScript podporují specifickou syntaxi pro vytváření soukromých proměnných a funkcí ve třídách? Pojďme se podívat!

Vlastnosti a metody třídy byly vždy považovány za veřejné; chcete-li vlastnost nebo metodu označit jako soukromou, přidejte # na začátku jejich jména:

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 je k dispozici, protože name je veřejný, zatímco age je soukromý, protože je deklarován pomocí # . Podobně můžeme deklarovat soukromou metodu pomocí # :

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 je povoleno volat pouze ze samotné třídy, protože je deklarováno pomocí # . Můžeme zpřístupnit jakékoli informace ze třídy, veřejné nebo soukromé, pokud je zpřístupníme veřejným způsobem:

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

Přidání nativní syntaxe pro deklarování vlastností a metod soukromých tříd je vítaným doplňkem JavaScriptu; ještě lepší je, že to můžete udělat jednoduše přidáním # na začátek svého názvu.

Napsali jste kód pomocí soukromé syntaxe v JavaScriptu? Jaký to byl zážitek?!