我为javascript(http://my.opera.com/GreyWyvern/blog/show.dml/1725165)找到了这个很棒的克隆函数,但它在jquery中出现了错误:
未捕获的TypeError:对象函数[已删除]没有方法'替换'
这是功能:
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;
};
替换与任何事情有什么关系?
答案 0 :(得分:4)
当你延长Object.prototype
时,你冒了风险。它会强制所有for-in
枚举添加hasOwnProperty
,以确保不包含Object.prototype
扩展名。
jQuery并不总是包含该检查,可能是因为性能影响。所以在某个地方,它会在错误的地方遇到clone
函数。
不在Object.prototype
上使用它会更好,而是直接在Object
上使用它。
Object.clone = function(obj) {
var newObj = (this instanceof Array) ? [] : {};
for (i in this) {
if (obj[i] && typeof obj[i] == "object")
newObj[i] = Object.clone(obj[i]);
else
newObj[i] = obj[i]
}
return newObj;
};
然后从对象中调用它......
var clone = Object.clone(some_object);
请注意原始函数有行...
if (i == 'clone') continue;
这意味着您永远无法克隆名为clone
的属性。这显然不是一件好事。