Pola
Pola klasy są deklarowane bezpośrednio w treści klasy, a nie jawnie
dodane jako właściwość wartości this. Efekt jest jednak taki sam:
właściwości zdefiniowanej w instancjach tej klasy.
class MyClass {
myField;
}
const myClassInstance = new MyClass();
myClassInstance;
> MyClass { myField: undefined }
Pole możesz zainicjować wartością. Jest to często wartość domyślna, logika klasy może zastąpić:
class MyClass {
myResult = false;
set setValue( myValue ) {
this.myResult = myValue;
}
}
const myClassInstance = new MyClass();
myClassInstance;
> Object { myResult: false }
myClassInstance.setValue = true;
myClassInstance;\
> Object { myResult: true }
Pola klasy działają tak samo jak właściwości dołączone do klasy
za pomocą funkcji this. Oznacza to, że można je otwierać i modyfikować spoza
klasy jak każda inna właściwość.
class MyClass {
myField = true;
}
const myClassInstance = new MyClass();
myClassInstance.myField;
> true
myClassInstance.myField = false;
myClassInstance.myField;
> false;
Pola stanowią podstawę do niektórych bardziej zaawansowanych funkcji klas.
Prywatne pola i metody
Pola i metody prywatne są niedostępne poza zajęciami. Prywatny jest powiązana z wystąpieniem klasy, co oznacza, że każde wystąpienie zawiera własny zestaw prywatnych pól i metod, które zostały zdefiniowane w klasie.
Aby ustawić usługę jako prywatną, dodaj # na początku identyfikatora, gdy
w takim przypadku:
class MyClass {
#myPrivateField = true;
#myPrivateMethod() {}
}
const myClassInstance = new MyClass();
myClassInstance;
> MyClass { #myPrivateField: true }
#myPrivateField: true
<prototype>: Object { … }
constructor: class MyClass {}
<prototype>: Object { … }
Pole prywatne musi być zadeklarowane w treści klasy zawierającej. Dostępne opcje
zmienić jego wartość później jako właściwość this, ale nie można utworzyć pola
za pomocą funkcji this.
Pola prywatne nie są dostępne z innych miejsc w skrypcie. Spowoduje to zablokowanie danych właściwości nie mogą być modyfikowane poza podanymi metodami gettera i metod ustalających wchodzić w interakcję z zawartymi w nich wartościami, uniemożliwiając bezpośredni dostęp do przeznaczone do użycia wyłącznie w samej klasie.
class MyClass {
#myResult = false;
set setValue( myValue ) {
this.#myResult = myValue;
}
}
const myClassInstance = new MyClass();
myClassInstance;
> MyClass { #myResult: false }
myClassInstance.#myResult = true;
> Uncaught SyntaxError: reference to undeclared private field or method #myResult
myClassInstance.setValue = true;
myClassInstance;\
> MyClass { #myResult: true }
Pamiętaj jednak, że konsole programisty są zwykle bardzo mało restrykcyjne, ale niespójne, dotyczące zezwalania na dostęp do pól prywatnych na potrzeby debugowania cele:
class MyClass {
#myPrivateField = true;
#myPrivateMethod() {
console.log( "This is inside a private method." );
}
}
const myClassInstance = new MyClass();
myClassInstance;
> MyClass {#myPrivateField: true}
myClassInstance.#myPrivateField;
> true
myClassInstance.#myPrivateMethod();
> "This is inside a private method."
class MyClass {
#myPrivateField = true;
#myPrivateMethod() {
console.log( "This is inside a private method." );
}
}
const myClassInstance =