function deepCopy(source) {
return (function _copy(parent) {
var child;
for (var i in parent) {
if (parent.hasOwnProperty(i)) {
child[i] = _copy(parent[i]);
} else {
child = parent;
}
}
return child;
})(source)
}
複製代碼
constructor
都是指向Object構造函數constructor
指向問題function getType(obj) {
var typeString = Object.prototype.toString.call(obj);
return typeString.substring(8, typeString.length - 1);
}
function deepCopy(source) {
return (function _copy(parent) {
var child;
switch (getType(parent)) {
case 'Object':
// 處理對象原型,指向父類的constructor
child = Object.create(Object.getPrototypeOf(parent));
for (var i in parent) {
if (parent.hasOwnProperty(i)) {
child[i] = _copy(parent[i]);
}
}
break;
default:
child = parent;
}
return child;
})(source)
}
複製代碼
function getType(obj) {
var typeString = Object.prototype.toString.call(obj);
return typeString.substring(8, typeString.length - 1);
}
function deepCopy(source) {
var copyedList = [];
return (function _copy(parent) {
var child;
switch (getType(parent)) {
case 'Object':
// 是否已經克隆過了
var isCopyIndex = copyedList.indexOf(parent);
if (isCopyIndex >= 0) {
child = copyedList[isCopyIndex]
} else {
copyedList.push(parent);
// 處理對象原型,指向父類的constructor
child = Object.create(Object.getPrototypeOf(parent));
for (var i in parent) {
if (parent.hasOwnProperty(i)) {
child[i] = _copy(parent[i]);
}
}
}
break;
default:
child = parent;
}
return child;
})(source)
}
複製代碼
其實仍是有一些問題javascript