网络编程
位置:首页>> 网络编程>> JavaScript>> 自己重新写了一个JavaScript的对象克隆函数

自己重新写了一个JavaScript的对象克隆函数

作者:yemoo 来源:ajaxbbs 发布时间:2008-08-03 16:47:00 

标签:函数,对象,javascript

前段时间在网上找了一个“完美的”JavaScript对象克隆的函数,感觉还不错,但随后便出现了一些问题,发现这个克隆并不好用,在使用发现了如下缺陷:

1、直接为object原型扩展了方法,导致所有的object都多了一个objectClone方法,这样在使用反射取一个object的接口时就不准确了,这个一些网友也做了评论提到这个问题,不过这个问题好办,我把他变成一个全局函数就ok了,但还有下面的问题。

2、对于数组元素的克隆存在很大的问题。如var a={a:1,b:'xxx',c:[]}克隆后的对象编程{a:1,b:'xxx',c:[[]]},这个问题导致我的程序后来出现了很多莫名奇怪的问题,郁闷死,后来调试发现这个问题,真是非常之郁闷。

之余以上两点原因,我决定还是自己写一个,好在这个实现起来也并不麻烦。

代码如下:

/*克隆函数,传入要克隆的对象*/ 
var objClone=function(orgin){
    var obj={};
    if(typeof orgin=="object"){
        var cb=arguments.callee;
        if(orgin instanceof Array){
            for(var i=0,obj=[],l=orgin.length;i<l;i++){
                obj.push(cb(orgin[i]));
            }
            return obj;
        }
        for(var i in orgin){
            obj[i]=cb(orgin[i]);
        }
        return obj;
    }
    return orgin;
}

这次我没敢再写到object的原型上,还是独立函数比较好。此外在实际中可以对objClone改名,因为内部的递归调用采用varguments.callee。

如果那位朋友觉得有用,就拿去把。

0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com