function cloneObject(src) {
// 只有object和array里,for-in才能获取到参数
// 注意返回的是'[object Array]'后面大写
if (Object.prototype.toString.call(src).slice(8, -1) === 'Object'
|| Object.prototype.toString.call(src).slice(8, -1) === 'Array') {
// 判断是Object还是Array
var result = src instanceof Object?{}:[];
for (var i in src) {
if (src.hasOwnProperty(i)) {
// 对象或数组里面,继续遍历来获取,直到属性值为非Object或Array
result[i] = cloneObject(src[i]);
}
}
return result;
}
// 原始类型和Date, Boolean等对象类型直接返回就好了
else {
return src;
}
}
var srcObj = {
a: 1,
b: {
b1: ["hello", "hi"],
b2: "JavaScript"
}
};
// 浅拷贝
var abObj = srcObj;
// 深拷贝
var tarObj = cloneObject(srcObj);
srcObj.a = 2;
srcObj.b.b1[0] = "Hello";
console.log(abObj.a); // 2
console.log(abObj.b.b1[0]); // 'Hello'
console.log(tarObj.a); // 1
console.log(tarObj.b.b1[0]); // "hello"
var clone_abd = new Function(abd.toString());// 可以拷贝函数