Какой принцип ООП реализуют замыкания?

217
18 мая 2018, 11:00

Я бы ответил: наследование и полиморфизм. Пример наследования: в функции можно использовать внешние переменные. Полиморфизм: можно создать две функции или переменные с одинаковыми именами, но с разными областями видимости

Answer 1

Замыкания сами по себе не реализуют никакой принцип. Это просто один из механизмов языка.

Но если вопрос на самом деле звучал как "Какой принцип ООП обычно реализуется с помощью замыканий" - то ответ: инкапсуляция.

Дело в том, что в JS нет модификаторов доступа - аналогов private / public / protected из C++/C#/Java.

На Java/C# модификаторы доступа позволяют скрыть то, как именно класс хранит данные - например, скрыть факт, что возраст пользователя хранится в поле _age - достаточно просто поставить на поле private, и добавить методы getAge / setAge, через которые можно контролировать процесс установки возраста.

На JavaScript нельзя скрыть детали реализации - т.е. в ваше поле _age снаружи может влезть любой желающий, в обход getAge / setAge.

Стаднартное решение - вместо поля использовать локальную переменную, и использовать замыкание на нее в методах getAge / setAge. Эта переменная не будет видна снаружи (т.к. это локальная переменная в методе, не поле объекта).

function User (name, age) {
    this.name = name; // видна снаружи
    var _age = age;   // не видна снаружи
    this.getAge = function() {
        return _age;
    }
    this.setAge = function(age) {
        if(typeof age === "number" && age >0 && age<110){
            _age = age;
        } else {
            console.log("Недопустимое значение");
        }
    }
}

Код взят с metanit, https://metanit.com/web/javascript/4.7.php

READ ALSO
Прототипное наследование в JS

Прототипное наследование в JS

Сначала я думал, что разобрался с прототипным наследованием в JS (ведь оно такое простое), а теперь мне кажется, что я не понимаю, зачем все это...

402
Не удается запарсить xlsx в архив JSON объектов

Не удается запарсить xlsx в архив JSON объектов

вот с чем столкнулся, используя библиотеку xlsx в ноде смогу запарсить документ в архив с объектамиНо так получилось, что сейчас нужно сделать...

179
метод объекта с вызовом Ajax с ошибками, и почему так

метод объекта с вызовом Ajax с ошибками, и почему так

Подскажите пожалуйста, почему происходит такое поведение кодаЯ только учусь и насколько я понял, создавать классы от одно родительского...

325