自己重新写了一个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
投稿

猜你喜欢

  • session的存储方式和配置方法介绍

    2022-04-28 05:48:59
  • Python入门教程之Python的安装下载配置

    2021-08-18 06:01:14
  • 在 Linux/Mac 下为Python函数添加超时时间的方法

    2023-08-17 14:27:12
  • Python中 join() 函数的使用示例讲解

    2023-03-29 02:32:25
  • 爱你就要说出来,来表白吧

    2008-11-23 16:23:00
  • PyQt5+python3+pycharm开发环境配置教程

    2022-11-03 03:34:11
  • 《JavaScript语言精粹》译者序及样章试读

    2009-04-03 11:38:00
  • Python两台电脑实现TCP通信的方法示例

    2023-09-07 04:17:34
  • CSS 针对 Safari(WebKit)的 CSS 注意事项 3

    2008-09-15 18:36:00
  • SQLServer 2008中通过DBCC OPENTRAN和会话查询事务

    2024-01-13 15:35:55
  • Matlab常用的输出命令disp与fprintf解读

    2022-03-18 17:13:58
  • 浅谈Go中数字转换字符串的正确姿势

    2024-05-08 10:51:42
  • pycharm中jupyter的使用图文教程

    2023-10-01 13:36:11
  • python opencv实现图像矫正功能

    2022-05-22 17:00:13
  • ASP编程入门进阶(十一):Chat聊天程序

    2008-05-12 07:06:00
  • jQuery渐变发光导航菜单的实例代码

    2024-04-09 19:47:36
  • Python开发的HTTP库requests详解

    2021-09-06 19:08:09
  • 如何在golang中使用shopspring/decimal来处理精度问题

    2024-05-21 10:24:12
  • Python列表排序 list.sort方法和内置函数sorted用法

    2022-01-18 01:01:47
  • Python内置函数property()如何使用

    2022-12-07 07:04:28
  • asp之家 网络编程 m.aspxhome.com