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?!