как работает функция copy [закрыт]

183
27 марта 2021, 07:20
Закрыт. Этот вопрос необходимо уточнить или дополнить подробностями. Ответы на него в данный момент не принимаются.

Хотите улучшить этот вопрос? Добавьте больше подробностей и уточните проблему, отредактировав это сообщение.

Закрыт 1 год назад.

Улучшить вопрос

var vasya = { 
  age: 21, 
  name: 'Вася', 
  surname: 'Петров' 
}; 
 
var user = { 
  isAdmin: false, 
  isEmailConfirmed: true 
}; 
 
function copy() { 
  // объявляем переменную dst и присваиваем нулевой объект из arguments 
  var dst = arguments[0]; 
  // начиная с первого объекта перечисляем в цикле   
  for (var i = 1; i < arguments.length; i++) { 
     // объявляем переменную arg и присваиваем объект из arguments 
    var arg = arguments[i]; 
    // в цикле перебиваем свойства объектов  
    for (var key in arg) { 
      // тут я не могу понять dst[key] = arg[key]; по идеи в переменную dst[key] присваивается свойства  arg[key]  
      // только arg[key] обозначает значение свойства, т.е. если переменная обозначеает arg == 
      // user получим false и т. д. а как же тогда ключи т.е. isAdmin и т.д. ? 
      dst[key] = arg[key]; 
    } 
  } 
 
  return dst; 
} 
 
console.log(copy(vasya, user))

var vasya = { 
  age: 21, 
  name: 'Вася', 
  surname: 'Петров' 
}; 
 
 
for(var key in vasya){ 
  console.log(key + ' ' + vasya[key]) 
};

Answer 1
var vasya = {
  age: 21,
  name: 'Вася',
  surname: 'Петров'
};
var user = {
  isAdmin: false,
  isEmailConfirmed: true
};
function copy() {
  // объявляем переменную dst и присваиваем нулевой объект из arguments
  var dst = arguments[0];
  // начиная с первого объекта перечисляем в цикле  
  for (var i = 1; i < arguments.length; i++) {
    // объявляем переменную arg и присваиваем объект из arguments
    var arg = arguments[i];
    // В цикле из объекта 'arg' "копируем" свойства и их значения в объект 'dst'
    for (var key in arg) {
    /* 
    Если в объекте 'dst' нету свойста 'key' это свойство присваивается объекту 
    'dst', после чего свойству 'key' в объекте 'dst' присваивается значение 
    свойства 'key' объекта 'arg' 
    */
    // Вот как это выглядит на первой итерации: vasya['isAdmin'] = user['isAdmin'];
    dst[key] = arg[key];
    /* После первой итерации объект 'vasya' будет равен vasya = {
                                                          age: 21,
                                                          name: 'Вася',
                                                          surname: 'Петров',
                                                          isAdmin: false,
                                                        } 
    */
    }
  }
  return dst;
}
console.log(copy(vasya, user))

Кстати в нашем случае можно и без цикла:

for (var i = 1; i < arguments.length; i++)

Идентичный код без цикла:

var vasya = {
    age: 21,
    name: 'Вася',
    surname: 'Петров'
};
var user = {
    isAdmin: false,
    isEmailConfirmed: true
};
function copy() {
  var dst = arguments[0];
  var arg = arguments[1];
  for (var key in arg) {     
    dst[key] = arg[key];   
  }
  return dst;
}
console.log(copy(vasya, user))
READ ALSO
Шестиугольник в svg с изображением

Шестиугольник в svg с изображением

Есть два svg с изображением внутри, но во 2-ом svg у изображения другой размер, из-за этого 2-ой svg преобразуется в восьмиугольник

153
Заполнение контейнера std::map с учётом значений по умолчанию

Заполнение контейнера std::map с учётом значений по умолчанию

Подскажите можно ли сделать следующую задачу "в одну строчку", те

259
Как увеличить размер QWidget за пределы Parent Widget

Как увеличить размер QWidget за пределы Parent Widget

Когда увеличиваешь размер виджета то не выходит за пределы родителя А если не даешь указатель на родителя то нормально выходит за пределы...

189
Как подключить внешнюю библиотеку в Clion

Как подключить внешнюю библиотеку в Clion

Как подключить внешнюю библиотеку в Clion?

164