Назад к вопросам
Middle
121
questionbank

Как можно реализовать инкапсуляцию в JavaScript с помощью замыканий?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

Инкапсуляцию в JavaScript можно реализовать с помощью замыканий, создавая приватные переменные и методы внутри функции, которые недоступны извне, но могут быть использованы функциями, объявленными внутри.

function createCounter() {
  let count = 0; // Приватная переменная

  return {
    increment: function() { // Публичный метод
      count++;
      console.log(count);
    },
    decrement: function() { // Публичный метод
      count--;
      console.log(count);
    },
    getCount: function() { // Публичный метод
      return count;
    }
  };
}

const counter = createCounter();
counter.increment(); // Вывод: 1
counter.increment(); // Вывод: 2
console.log(counter.getCount()); // Вывод: 2
// console.log(counter.count); // undefined - доступ к приватной переменной запрещен

В данном примере:

  • count является приватной переменной, доступной только функциям, объявленным внутри createCounter.
  • Объект, возвращаемый функцией, содержит публичные методы (increment, decrement, getCount), которые имеют доступ к приватной переменной count благодаря замыканию.
  • Извне counter мы можем вызывать только эти публичные методы, но не можем напрямую получить доступ или изменить count.

Это позволяет скрыть внутреннее состояние объекта и предоставить контролируемый интерфейс для взаимодействия с ним.