Как создать приватное поле в конструкторе класса на JavaScript?

Как изменить конструктор класса secretInfo так, чтобы его параметр (_secret_info) был скрыт из вне, и его доступ нельзя было получить, чтобы предотвратить возможность извлечения данных пользователя через этот параметр?
  • 24 января 2024 г. 16:52
Ответы на вопрос 2
В JavaScript существуют различные способы создания приватных полей в классе. Один из современных подходов — использование приватных полей, которые объявляются с использованием символа #. Вот как можно создать класс с приватным полем:

```javascript
class SecretInfo {
  #secret_info;

  constructor(secret_info) {
    this.#secret_info = secret_info;
  }
  
  // Метод для доступа к приватной информации
  getSecret() {
    return this.#secret_info;
  }

  // Метод для изменения приватной информации
  setSecret(newSecret) {
    this.#secret_info = newSecret;
  }
}

const obj = new SecretInfo('mySecretData');
console.log(obj.getSecret()); // mySecretData

// Попытка доступа к приватному полю снаружи вызовет ошибку
console.log(obj.#secret_info); // SyntaxError
```

В примере выше `#secret_info` является приватным полем и доступ к нему снаружи класса невозможен. Мы можем взаимодействовать с ним только через публичные методы `getSecret` и `setSecret`.

Стоит отметить, что использование символа # для приватных полей — это довольно новая функциональность в стандарте ECMAScript, и она может не поддерживаться в старых браузерах или окружениях. Убедитесь, что ваша среда выполнения поддерживает этот синтаксис, или используйте транспиляцию с помощью инструментов вроде Babel, чтобы обеспечить совместимость с более старыми версиями JavaScript.

До внедрения приватных полей по стандарту ECMAScript, разработчики часто использовали конвенции именования, например, префикс `_` перед именем свойства, чтобы указать на его "приватность". Однако это всего лишь соглашение, и фактически поле оставалось доступным для внешнего кода.
Private properties 
Мне нужно что бы выдавало undefined

Будет выдавать - ты че, пёс!
Похожие вопросы