javascript克隆函数打破了jQuery

时间:2012-02-04 03:28:42

标签: jquery

我为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;
};

替换与任何事情有什么关系?

1 个答案:

答案 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的属性。这显然不是一件好事。