@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 |
Этот подход позволяет создавать приватные свойства для экземпляров класса, которые не могут быть доступны извне класса.