Я не знаю, когда это началось, но новое слово появилось в фронтальном круге: клонирование глубины объекта. Это выглядит очень высоко, но на самом деле это не новое. Возможно, вы использовали его в нашем реальном разработке проектов, но из -за глубокой китайской иероглифы некоторые изначально простые вещи становятся загадочными из -за слегка модифицированных некоторым, казалось бы, профессиональным словарем.
Прежде всего, зачем вам глубоко клонировать объект? Пожалуйста, позвольте мне сделать предположение: вы иногда думаете, что встроенный объектный документ JS слишком длинный, тогда вы можете сделать это:
Кода -копия выглядит следующим образом:
var d = документ;
d.by = function (id) {
return D.GetElementById (ID);
};
d.by ('id'). innerhtml = 'hello sentsin';
Приведенный выше код упрощает Document.getElementByID, а также добавляет метод по сравнению с исходным объектом документа. Вы можете проверить свое суждение через значение статуса, возвращаемое Document.hashownproperty ('by'). Давайте посмотрим на следующий пример.
Кода -копия выглядит следующим образом:
var person = {name: 'xianxin', профессия: 'Front-End Development', место: 'Hangzhou'};
var newperson = человек;
newperson.age = '24';
console.log (человек);
// Результат: {name: 'xianxin', профессия: «Фронт-эн-энд разработка», место: «Hangzhou», возраст: 24}
Видно, что когда объект просто передается в новую переменную, это просто псевдоним для объекта. Это означает, что исходное значение ключа объекта будет изменяться через операцию в псевдониме. Но проблема в том, что иногда мы хотим, чтобы Newperson был полностью независимым от человека, и между собой нет никаких отношений синхронизации, поэтому нам нужно генерировать копию, см. Пример:
Кода -копия выглядит следующим образом:
var cloneObj = function (obj) {
var str, newobj = obj.constructor === Массив? []: {};
if (typeof obj! == 'Object') {
возвращаться;
} else if (window.json) {
str = json.stringify (obj), // сериализованный объект
newobj = json.parse (str); //Восстановить
} еще {
для (var i in obj) {
newobj [i] = typeof obj [i] === 'объект'?
CloneObj (obj [i]): obj [i];
}
}
вернуть Newobj;
};
//тест
var obj = {a: 0, b: 1, c: 2};
var arr = [0, 1, 2];
// Выполнить глубокое клонирование
var newobj = cloneObj (obj);
var newarr = cloneObj (arr);
// Удалить удаление члена клонированного нового объекта
Удалить NewObj.A;
newarr.splice (0,1);
console.log (obj, arr, newobj, newarr);
// Результат: {a: 0, b: 1, c: 2}, [0, 1, 2], {b: 1, c: 2}, [1, 2];
Это так называемый клонирование объекта. Но есть несколько вещей, которые нужно объяснить. Объект JSON и его методы участников строили и разбираются в коде, принадлежат спецификации ECMASCRICT5. Они несут ответственность за преобразование объекта (включая объекты массива) в строки и их восстановление, тем самым осознавая глубокое копирование объекта. Таким образом, для браузеров низкого уровня (например, IE), если вы копируете массивы, вы можете использовать NewObj.concat (OBJ), а обычные объекты могут просто перечислять и назначать значения.