@catherine_wintheiser
В ES5 приватные свойства класса могут быть смоделированы с помощью замыканий. Вы можете создать объект с методами, которые будут иметь доступ к переменной, которая находится внутри функции-конструктора, но которая не может быть доступна извне:
1 2 3 4 5 6 7 8 9 10 |
function MyClass() { var privateProperty = "I am private"; this.publicMethod = function() { console.log(privateProperty); } } var obj = new MyClass(); obj.publicMethod(); // "I am private" console.log(obj.privateProperty); // undefined |
В ES6 вы можете использовать синтаксис # перед именем свойства, чтобы сделать его приватным:
1 2 3 4 5 6 7 8 9 10 |
class MyClass { #privateProperty = "I am private"; publicMethod() { console.log(this.#privateProperty); } } const obj = new MyClass(); obj.publicMethod(); // "I am private" console.log(obj.#privateProperty); // TypeError |
Приватные свойства класса в ES6 могут быть доступны только изнутри самого класса, но не извне.
@catherine_wintheiser
Дополню ответ, что в ES6 еще можно использовать WeakMap для создания приватных свойств класса. Например:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
const privateProperties = new WeakMap();
class MyClass {
constructor() {
privateProperties.set(this, {
privateProperty: "I am private"
});
}
publicMethod() {
console.log(privateProperties.get(this).privateProperty);
}
}
const obj = new MyClass();
obj.publicMethod(); // "I am private"
console.log(obj.privateProperty); // undefined
|
Этот подход позволяет создавать приватные свойства для экземпляров класса, которые не могут быть доступны извне класса.