<script>
var obj = {
lastName: "ly",
age: 6,
sk: 2,
arr: ['1', '2'],
son: {
name: 'xiaofan',
age: 2
}
}
var obj1 = {
}
// 判断是不是原始值
// 判断是数组还是对象
// 建立相应数据或对象
function deepClone(origin, target) {
var target = target || {};
var toStr = Object.prototype.toString;
var arrStr = "[object Array]";
for (var prop in origin) {
if (origin.hasOwnProperty(prop)) {
if (origin[prop] !== 'null' && typeof (origin[prop]) == 'object') {
toStr.call(origin[prop]) == arrStr ? target[prop] = [] : target[prop] = {};
deepClone(origin[prop], target[prop]);
} else {
target[prop] = origin[prop];
}
}
}
return target;
}
deepClone(obj, obj1)
</script>
递归方式实现对象的深度克隆
注意origin.hasOwnProperty(prop)这个,
这个判断用于鉴定origin上是否有prop这个属性,如果有则返回true,没有则返回false;
这个语法不会去查找原型链上面的属性;
例如:
var obj ={
a:12,
b:12
fn:function(){
},
c:{
d:12
}
}
obj.hasOwnProperty(a) // true
obj.hasOwnProperty(d) // false