Я бы ответил: наследование и полиморфизм. Пример наследования: в функции можно использовать внешние переменные. Полиморфизм: можно создать две функции или переменные с одинаковыми именами, но с разными областями видимости
Замыкания сами по себе не реализуют никакой принцип. Это просто один из механизмов языка.
Но если вопрос на самом деле звучал как "Какой принцип ООП обычно реализуется с помощью замыканий" - то ответ: инкапсуляция.
Дело в том, что в 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
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Сначала я думал, что разобрался с прототипным наследованием в JS (ведь оно такое простое), а теперь мне кажется, что я не понимаю, зачем все это...
вот с чем столкнулся, используя библиотеку xlsx в ноде смогу запарсить документ в архив с объектамиНо так получилось, что сейчас нужно сделать...
Подскажите пожалуйста, почему происходит такое поведение кодаЯ только учусь и насколько я понял, создавать классы от одно родительского...