这是我的函数,我用它来覆盖对象的clone
属性,以创建对象的新副本,而不仅仅是引用。
Object.prototype.clone = function () {
var newObj = (this instanceof Array) ? [] : {};
for (i in this)
{
if (i == 'clone') continue;
if (this[i] && typeof this[i] == "object") {
newObj[i] = this[i].clone();
} else
newObj[i] = this[i]
}
return newObj;
}
我还为window object
添加了一些属性。
修改
实际上我在我的代码中使用了几个库。当我没有这些库运行此方法时,它工作正常。但是使用这些库会出现这个错误。他们可能已经提供了自己的克隆实现。
现在,当我调用此方法时,我得到了Maximum call stack size exceeded
。
任何帮助? 谢谢
答案 0 :(得分:0)
在普通Object {}
上尝试使用您的方法可以正常工作,与Array []
我不完全确定这是你在找什么,但它解决了这个问题:
Object.prototype.clone = function () {
if (this instanceof Array) return this.slice(0);
var newObj = {};
for (var i in this) {
if (i == 'clone') continue;
if (this[i] && typeof this[i] == "object") {
newObj[i] = this[i].clone();
} else newObj[i] = this[i];
}
return newObj;
};
如果您的Object
是Array
的实例,则无需以此方式克隆它,我相信您可以将其返回并停止该功能。请参阅this JSFiddle。