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

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

前段时间在网上找了一个“完美的”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。

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

标签:函数,对象,javascript
0
投稿

猜你喜欢

  • 一种特别简单的MySQL数据库安装方法

    2008-12-17 15:30:00
  • asp+ajax版四级联动菜单(数据库)

    2009-07-03 15:40:00
  • ASP 验证码的程序及原理

    2010-04-24 15:56:00
  • 如何创建SQL Server 2000故障转移群集

    2009-02-13 17:18:00
  • sql2005与sql200数据导入导出

    2009-03-13 13:16:00
  • Js中的函数直接量

    2007-12-21 19:15:00
  • sql基本查询语句介绍

    2008-05-21 13:58:00
  • sqlserver 触发器学习(实现自动编号)

    2012-10-07 10:58:03
  • 连接无法用于执行此操作。在此上下文中它可能已被关闭或无效

    2011-03-15 23:03:00
  • js自定义网页右键菜单方法

    2007-11-28 12:50:00
  • mysql proxy问题

    2009-02-27 15:54:00
  • ASP SCRIPT: 计数器(使用GrapShot组件)

    2008-11-07 15:36:00
  • ASP+SQLServer2000 经验积累

    2008-02-03 15:16:00
  • 用ASP和SQL实现基于Web日历源码

    2010-04-24 15:52:00
  • 解决ASP执行DB查询中的特殊字符问题

    2008-09-02 12:16:00
  • 全兼容的纯CSS级联菜单要点浅析

    2009-06-10 14:42:00
  • 浅析MySQL数据库授权原则

    2009-12-15 09:21:00
  • oracle 常用的几个SQL

    2009-12-01 12:36:00
  • 绿色下划线的简洁CSS导航代码

    2007-09-17 12:51:00
  • Dreamweaver MX网页图片热区使用方法

    2008-05-20 12:50:00
  • asp之家 网络编程 m.aspxhome.com