Development, interrupt the reference relationship between objects, just want the next copy of the situation everywhere, clone an object is inevitable.
In JavaScript, the simple way is to use the JSON function, stringify the object into a string, and then parse it into a new object. or from the Internet search code, open source community inside the clone code is still a lot of.
Although the code can be found, but, things are always someone else's, hands-on learning code is always a constant theme.
I wrote two cloned functions:
Cloneown: Clones the own properties of custom objects, excluding inherited properties, attributes can be basic data types and arrays, custom objects, and you can make a list of attribute names to be cloned.
Clonearray: Cloning arrays, the elements within an array can be objects, basic types.
Copy Code code as follows:
The first parameter is the cloned object, and the second parameter is the list of attributes that need to be cloned
function Cloneown () {
var obj = arguments[0];
if (typeof obj = = ' undefined ' | | | obj = = NULL)
return {};
if (typeof obj!== ' object ')
return obj;
The second argument is the list of property names, which is used to brush the selection
Otherwise, all attributes are cloned
var attrs = arguments[1];
var enable_spec_attr = true;
if (!) ( Attrs instanceof Array)) {
Console.log (ATTRS);
Attrs = obj;
Enable_spec_attr = false;
}
var result = {};
var i;
For (i in Attrs) {
attr = enable_spec_attr? Attrs[i]: i;
Console.log (attr);
if (Obj.hasownproperty (attr)) {
if (Obj[attr] instanceof Array) {
RESULT[ATTR] = Clonearray (obj[attr]);
}
else if (typeof obj[attr] = = ' object ') {
RESULT[ATTR] = Cloneown (obj[attr]);
} else {
RESULT[ATTR] = obj[attr];
}
}
}
return result;
}
Copy Code code as follows:
Cloning an array
function Clonearray (array) {
if (typeof array = = ' undefined ' | | | array = = NULL)
return [];
if (!) ( Array instanceof Array))
return [];
result = [];
var i;
For (i in array) {
if (typeof Array[i]!== ' object ') {
Result[i] = Array[i];
Continue
}
Clone object
Result[i] = Cloneown (Array[i]);
}
return result;
}
Call
1. General Cloning Custom objects:
Copy Code code as follows:
var a = {
Name: ' Frank ',
Age:20
};
var b= cloneown (a);
2. Specify the properties of the clone
Copy Code code as follows:
var a = {
Name: ' Frank ',
AGE:20,
Address: ' Any where '
};
var B = Cloneowne (A, [' Name ', ' age ']);
3. Cloning a custom object that contains an array property
Copy Code code as follows:
var a = {
Name: ' Kxh ',
AGE:20,
Books: [' Hai ', ' ho ', ' Ali '],
Likes: [
{wname: ' Kaili ', wage:81, fav: "AAAAA"},
{wname: ' Seli ', wage:82, fav: "BBB"},
{wname: ' Ailun ', wage:83, fav: "CCC"},]
};
var B = Cloneowne (a);
4. Cloning arrays, containing custom objects
Copy Code code as follows:
var a = [
{
Name: ' Frank ',
Age:20
},
{
Name: ' Leon ',
Age:30
}
];
var B = Clonearray (a);
The above code still has a lot of problems, for example, there are some problems with the cloning of built-in objects, such as the datatime type.
Problem management problem, such a learning process is also needed.