ZdraviiSmisl
@ZdraviiSmisl

Для чего аргументы псевдомассива arguments сохранять в переменную arg перед копированием в объект?

В данном случае функция copy копирует свойства нескольких объектов в новый объект,а ниже её реализация.Копируются свойства первого уровня,т.е. вложенные объекты не обрабатываются. Здесь первый аргумент copy – это объект, в который нужно копировать, он назван dst. Для упрощения доступа к нему можно указать его прямо в объявлении функции: Так собственно сам вопрос для чего создавать переменную arg,почему напрямую не скопировать вот так: dst[key] = arguments[key]? Или перебрать псевдомассив с помощью цикла for in нельзя?

function copy(dst) {
  // остальные аргументы остаются безымянными
  for (var i = 1; i < arguments.length; i++) {
    var arg = arguments[i];
    for (var key in arg) {
      dst[key] = arg[key];
    }
  }

  return dst;
  • Вопрос задан
  • 74 просмотра
Решения вопроса 1
zendor
@zendor
Напрямую не получится. Цикл for in в данном случае перебирает свойства каждого объекта хранящегося в arguments (начиная с индекса 1, так как первым у нас хранится целевой объект).

const o = {};

function copy(t, ...r) {
  for (k in r) t[k] = r[k];
}

copy(o, {name: 'John'}, {n: 42});
o //0: {name: "John"} 1: {n: 42}


Если вы имели ввиду так как в примере выше, тогда он просто присвоит каждый объект в качестве свойств целевого объекта, вместо того чтобы скопировать их свойства.
Надеюсь понятна суть.
Почему просто не использовать Object.assign();
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы