您的位置:首页 > Web前端 > JavaScript

js对象深拷贝的简单实现

2013-11-25 00:00 826 查看
实现代码:

Object.prototype.clone = function() {
var newObj = {};
for (var i in this) {
if (typeof(this[i]) == 'object' || typeof(this[i]) == 'function') {
newObj[i] = this[i].clone();
} else {
newObj[i] = this[i];
}
}
return newObj;
};

Array.prototype.clone = function() {
var newArray = [];
var length = this.length;
for (var i = length; i--;) {
if (typeof(this[i]) == 'object' || typeof(this[i]) == 'function') {
newArray[i] = this[i].clone();
} else {
newArray[i] = this[i];
}
}
return newArray;
};

Function.prototype.clone = function() {
var that = this;
var newFunc = function() {
return that.apply(this, argunets);
};
for (var i in this) {
newFunc[i] = this[i];
}
return newFunc;
};

测试代码以及运行结果:

var obj = {
name: 'void',
contents: ['node'],
display: function() {
console.log(this.name);
},
};

var newObj = obj.clone();
newObj.contents.push('test');
console.log(obj.contents);//输出 ['node']
console.log(newObj.contents);//输出 ['node', 'test']
console.log(newObj.display == obj.display);//输出 false

ps: 上述代码只是深拷贝的简单实现,当遇到两个互相引用的对象,会出现死循环的情况!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  对象深拷贝