Этот сайт использует cookies. Продолжение работы с сайтом означает, что Вы согласны!
Приватные поля и методы
Поле внутри класса можно объявить приватным. Для этого перед его именем следует указать символ #
. Приватное поле должно быть объявлено вне конструктора. Попытка создания приватного поля внутри конструктора приведет к исключению. Приватное поле доступно через указатель this
только внутри класса, в котором оно объявлено (листинг 11.10).
Листинг 11.10. Приватные поля
class A {
#a = 10; // Приватные поля
#b = 32;
#c; // undefined
constructor(_a) {
this.#a = _a; // Замена значения приватного поля
// this.#d = 0; // Так нельзя!
// SyntaxError: Private field '#d' must be declared
// in an enclosing class
}
print() {
console.log(`#a = ${this.#a}`); // #a = 6
console.log(`#b = ${this.#b}`); // #b = 32
console.log(`#c = ${this.#c}`); // #c = undefined
}
}
let objA = new A(6);
// console.log( objA.#a ); // Так нельзя!
// SyntaxError: Private field '#a' must be declared
// in an enclosing class
objA.print();
console.log( objA ); // A {}
console.log(
Object.getOwnPropertyDescriptors( objA ) ); // {}
Приватное поле может хранить ссылку на функцию, следовательно, мы можем сделать приватными и методы. Давайте создадим приватный метод и дополнительно реализуем публичный доступ к приватному полю с помощью setter
и getter
(листинг 11.11).
Листинг 11.11. Приватные поля и методы
class A {
#x = 10; // Приватное поле
set x(value) { // Setter
this.#x = value;
}
get x() { // Getter
return this.#x;
}
#privateFunc = function(msg) { // Приватный метод
console.log(`${msg}${this.#x}`);
};
print() {
this.#privateFunc('#x = ');
}
}
let objA = new A();
console.log(objA.x); // 10 (setter)
objA.x = 2; // (getter)
objA.print(); // #x = 2
// Так нельзя
// objA.#privateFunc('test ');
// SyntaxError: Private field '#privateFunc'
// must be declared in an enclosing class
Помощь сайту
ЮMoney (Yandex-деньги): 410011140483022
ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов