02. Copying Objects
Object.assign
Object.assignФункция Object.assign получает список объектов и копирует в первый target свойства из остальных. При этом последующие свойства перезаписывают предыдущие. Этот прием так же можно использовать для поверхностного копирования.
Object.assign(target, src1, src2...)const user = { name: "Вася" };
const visitor = { isAdmin: false, visits: true };
const admin = { isAdmin: true };
Object.assign(user, visitor, admin); // name: Вася, visits: true, isAdmin: true
// clone = пустой объект + все свойства user
const user = { name: "Вася", isAdmin: false };
const clone = Object.assign({}, user);Особенности:
Object.assignкопирует как строковые ключи, так и символьныеКопируются только собственные перечисляемые свойства. Унаследованные и неперечисляемые свойства игнорируются.
Чтение свойства - это обычная операция получения свойства. Если свойство представляет собой метод доступа, то копируется только полученное значение, а не сам метод.
Запись свойства в
target- это обычная операция присваивания свойства. Функции setter-ы не копируются.Нельзя скопировать метод, использующий
superв другой объект.
Для полного копирования всех свойств, включая копирование методов доступа необходимо использовать следующие функции:
Способ 2:
Метод Object.assign можно использовать для заполнения значений по умолчанию:
A method that uses super is firmly connected with its home object (the object it is stored in). There is currently no way to copy or move such a method to a different object.
Deep copy
Для создания полностью идентичной копии другого объекта необходимо выполнить два шага:
Копия должна иметь тот же прототип
Копия должна иметь те же атрибуты с теми же значениями, что и оригинал.
Шаги алгоритма:
Get an array with the keys of all own properties of source.
Iterate over those keys.
Retrieve a property descriptor.
Use that property descriptor to create an own property in target.
Last updated
Was this helpful?