Во время разработки неизбежно, что вы можете прервать эталонные отношения между объектами и просто хотите оставить копию.
В JavaScript простой метод состоит в том, чтобы использовать функцию JSON для обработки объекта в строку, а затем разобрать ее в новый объект. Любой поиск кода онлайн, в сообществе с открытым исходным кодом все еще много кодов клонов.
Хотя код может быть найден, вещи всегда являются чьим -то другим, а коды обучения всегда будут неизменной темой.
Я сам написал две клонированные функции:
Cloneown: клонировать собственные свойства пользовательского объекта, который не включает унаследованные свойства. Свойства могут быть основными типами данных и массивами. Пользовательские объекты могут быть настроены. Вы можете сформулировать список имен атрибутов для клона.
CLONEARRAY: клонировать массив, элементы в массиве могут быть объектами, основными типами.
Кода -копия выглядит следующим образом:
// Первый параметр является клонированным объектом, а второй параметр - это список атрибутов, который необходимо клонировать
function cloneown () {
var obj = аргументы [0];
if (typeof obj === 'не определено' || obj === null)
возвращаться {};
if (typeof obj! == 'Object')
вернуть OBJ;
// Второй параметр - это список имен атрибута, поэтому используйте этот список, чтобы выбрать
// В противном случае все атрибуты будут клонированы
var attrs = аргументы [1];
var enable_spec_attr = true;
if (! (attrs ancessionof массива)) {
//console.log(attrs);
attrs = obj;
enable_spec_attr = false;
}
var result = {};
var i;
для (I in attrs) {
attr = enable_spec_attr? attrs [i]: i;
//console.log(attr);
if (obj.hashownproperty (attr)) {
if (obj [attr] экземпляр массива) {
результат [attr] = clonearray (obj [attr]);
}
else if (typeof obj [attr] === 'object') {
Результат [attr] = cloneown (obj [attr]);
} еще {
результат [attr] = obj [attr];
}
}
}
результат возврата;
}
Кода -копия выглядит следующим образом:
// клонировать массив
Функция clonearray (массив) {
if (typeof array === 'undefined' || array === null)
возвращаться [];
if (! (экземпляр массива массива))
возвращаться [];
result = [];
var i;
для (я в массиве) {
if (typeof array [i]! == 'Object') {
результат [i] = массив [i];
продолжать;
}
// клон объект
Результат [i] = Cloneown (Array [i]);
}
результат возврата;
}
Вызов
1. Регулярно клонировать пользовательские объекты:
Кода -копия выглядит следующим образом:
var a = {
Название: «Фрэнк»,
Возраст: 20
};
var b = cloneown (a);
2. Укажите клонированные свойства
Кода -копия выглядит следующим образом:
var a = {
Название: «Фрэнк»,
Возраст: 20,
Адрес: «В любом случае»
};
var b = cloneowne (a, ['name', 'age']);
3.clone пользовательский объект, содержащий атрибуты массива
Кода -копия выглядит следующим образом:
var a = {
имя: 'kxh',
Возраст: 20,
Книги: ['hai', 'ho', 'ali'],
Любит: [[
{wname: 'kaili', заработная плата: 81, фава: "aaaaaa"},
{wname: 'seli', заработная плата: 82, фава: "bbb"},
{wname: 'ailun', заработная плата: 83, фава: "ccc"},]
};
var b = cloneowne (a);
4.clone массив с помощью пользовательских объектов
Кода -копия выглядит следующим образом:
var a = [
{
Название: «Фрэнк»,
Возраст: 20
},
{
Имя: «Леон»,
Возраст: 30
}
];
var b = clonearray (a);
Есть еще много проблем с приведенным выше кодом, таких как клонирование встроенных объектов, таких как тип данных.
Проблемы управляются, и такой учебный процесс также должен быть выполнен.