@nak-alexey

Как реализовать инкапсуляцию в JS?

Есть такой код
function Timer(_node){  
    var node = document.querySelector(_node);
    Timer.prototype.getNode = function(){
        return node;
    };      
};


Можно ли использовать подобные конструкции для реализации инкапсуляции? Ведь переменные скрыты в объекте, да и общие методы можно вынести в прототип! Если дадите пример инкапсуляции в JS то дайте критику моему примеру. Спасибо!
  • Вопрос задан
  • 905 просмотров
Решения вопроса 1
k12th
@k12th
console.log(`You're pulling my leg, right?`);
Инкапсуляция и сокрытие все-таки немного разные вещи.

Для реализации приватных полей в JS есть вот такой пропозал: https://github.com/tc39/proposal-class-fields#priv...
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Ваш getNode будет работать некорректно, т.к. каждый раз будет перезаписываться в прототипе при создании нового объекта. Т.е. при вызове getNode для любого объекта Timer всегда будет извлекаться значение одной и той же переменной - захваченной при последнем создании объекта.

Более правильная реализация:
https://developer.mozilla.org/en-US/docs/Web/JavaS... , Emulating private methods with closures

проблема у такого подхода - всё это делается ценой рантайма - на каждый объект будут свои инстансы методов. Хотите нормальную инкапсуляцию? Берите TypeScript.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы