1PeGaS
@1PeGaS

Какой самый адекватный вариант инкапсуляции в JS?

Какой самый адекватный вариант инкапсуляции в JS?
Я предложил такой, может есть что-то по логичнее или удобнее ещё?
let Class1 = (function() {
let a = 5; // приватные данные так делаются в JS ?
return class Class1 {
    constructor() {
      this.b = 6;
    }

    meth() {
      alert(a);
    }
  }
})();

let o = new Class1();
o.meth();
  • Вопрос задан
  • 143 просмотра
Решения вопроса 1
bingo347
@bingo347 Куратор тега JavaScript
Crazy on performance...
1. Просто переменные в замыкании, как в Вашем примере. Из плюсов - работает везде, из минусов - переменные общие для всех инстансов
2. Просто соглашение, что определенные имена считать приватными и не трогать, общепринятым таким соглашением являются имена начинающиеся с подчеркивания _ - работает везде, но по факту ничего не делает, все на совести кодера
3. Поля символы (Symbol()) - нужен es2015+, по факту тоже не совсем приватные, из вне к ним можно доступ получить если есть доступ к символу (или сами его отдадите, или есть возможность получить все символы объекта), но уникальность символа дает достаточную приватность. Я лично предпочитаю именно этот вариант
4. объект в WeakMap с текущим this в качестве ключа - es2015+, полная приватность, но достаточно громоздко, суть в том, что в конструкторе мы создаем новый объект для хранения приватных свойств и сохраняем его в WeakMap с ключом this, а там где нужно извлекаем по this
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы