Pola i metody klas

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 =