Доброго вечера всем. Я уже писал тут, что изучаю JS по книге "Выразительный JS" и тема опять проходит по абстракциям. Насколько правильно я понимаю значение абстракции, как некий код, который можно использовать для выполнения различных задач?
Упражнение из книги: задача по абстрагированию:
Интерфейс к последовательностям. Разработайте интерфейс, абстрагирующий проход по набору значений. Объект с таким интерфейсом представляет собой последовательность, а интерфейс должен давать возможность в коде проходить по последовательности, работать со значениями, которые её составляют, и как-то сигнализировать о том, что мы достигли конца последовательности.
Я написал как я думаю верно и принес сюда на суд, мне интересно услышать мнение, насколько я заблуждаюсь в понятии абстрагирования и вообще почему это неправильно.
//Непосредственно абстрактная функция прохода по объекту
function abstractPassage(obj,acto) {
var keys = Object.getOwnPropertyNames(obj);
if (keys.length === 0) return "Объект пустой";
for (var i=0; i<keys.length; i++){
acto(keys[i], obj[keys[i]]);
}
return "Проход по объекту окончен";
}
//Создание объекта и набивание его свойствами, для примера выполнения, специально создал с неуказанным enumerable, чтобы свойства были неисчисляемыми
var obj = {};
Object.defineProperties(obj,{"a":{value:10},"b":{value:20},"c":{value:30}});
console.log(obj);
//Сначала пускаем с одним аргументом
abstractPassage(obj, function(arg1){
console.log(arg1);
});
/*!
a
b
c
*/
//Теперь со вторым аргументом, а первый пометим что не трогаем
abstractPassage(obj, function(_, arg2){
console.log(arg2);
});
/*!
10
20
30
*/
//Ну и с обоими одновременно
abstractPassage(obj, function(arg1, arg2){
console.log(arg1 + " : " + arg2);
});
/*!
a : 10
b : 20
c : 30
*/
Продвижение своими сайтами как стратегия роста и независимости