JavaScript ES6 классы: Инкапсуляция | ReactJS

JavaScript ES6 классы: Инкапсуляция | ReactJS

Инкапсуляцияесть ни что иное, как реализация приватности. В JavaScript подобная концепция реализуется благодаря функциям и их областям видимости.

// Функция конструктор 
var Person = function(name) {
  // Приватная функция
  var log = function(message) {
    console.log(message);
  };

  // Публичное свойство
  this.name = name;

  // Публичный метод
  this.logger = function(message) {
    log('Public ' + message);
  };
};

Что не так с инкапсуляцией в JavaScript? Всё просто. В примере приведённом выше отсутствует возможность явно обозначить приватность, как в других языках программирования с помощью ключевых словprivate,protectedиpublic(пример с PHP). Естественно, подобная проблема достаточно просто решается с помощью тех же самых функций — создаётся ещё одна обёртка над кодом в виде самовызывающейся анонимной функции, например, при использованиипаттерна “модуль”:

var Peron = (function() {
  // Приватная функция
  var log = function(message) {
    console.log(message);
  };
  
  var Person = function(name) {
    // Публичное свойство
    this.name = name;
  };

  // Публичный метод
  Person.prototype.logger = function(message) {
    log('Public ' + message);
  };

  // Экспорт публичной функции
  return Person;
})();

С релизом стандарта ES2015 подобная проблема приватности была частично решена добавлениемблочных областей видимостидля переменных, в результате чего чистые функции, работающие только для данного конкретного конструктора можно вынести в отдельный модуль и запрашивать по необходимости, не опасаясь того, что кто-то их перезапишет. Но чистые функции лишь вершина айсберга и про некоторые способы организации приватности при работе с классами в JavaScript можно прочитать вэтой статье.

Онлайн курс по React JS в Киеве | Frontend, обучение, уроки, ментор - ReactWarriors

Поделись знаниями: