js对象深拷贝

标签: js 对象 拷贝 | 发表时间:2012-06-16 12:22 | 作者:
出处:http://www.iteye.com

在做一个前台页面你的时候用到了一个自己写的List对象,在进行深拷贝的时候参考了网上的代码:

 

一、

 

 

var util = {
	clone : function(obj) {
		if (typeof (obj) != 'object')
			return obj;

		var re = {};
		if (obj.constructor==Array)
			re = [];

		for ( var i in obj) {
			re[i] = util.clone(obj[i]);
		}

		return re;

	}
};

 

 二、

 

 

//对象和数组的深拷贝 
  
Object.clone = function(sObj){ 
  
        if(typeof sObj !== "object"){ 
  
            return sObj; 
  
        } 
  
        var s = {}; 
  
        if(sObj.constructor == Array){ 
  
            s = []; 
  
        } 
  
        for(var i in sObj){ 
  
            s[i] = Object.clone(sObj[i]); 
  
        } 
  
        return s; 
  
   }

 

 

 

//对象扩展,tObj被扩展对象,sObj扩展对象  
  
   Object.extend = function(tObj,sObj){ 
  
        for(var i in sObj){ 
  
            if(typeof sObj[i] !== "object"){ 
  
                tObj[i] = sObj[i]; 
  
            }else if (sObj[i].constructor == Array){ 
  
                tObj[i] = Object.clone(sObj[i]); 
  
            }else{ 
  
                tObj[i] = tObj[i] || {}; 
  
                Object.extend(tObj[i],sObj[i]); 
  
            } 
  
        } 
  
   } 
 

   测试用例:

var a = {}; 
  
var b = {"a":1, 
  
         "b":{"c":function(t){ 
  
                       alert(t); 
  
                    } 
  
             }, 
  
         "d":{"e":2, 
  
              "f":[1,4,5,7,9] 
  
             } 
  
        }; 
  
Object.extend(a,b);//a获得了b的所有属性 

 三、说明:

我自己定义的list中没有定义constructor,所以执行sObj.constructor == Array会报错,我就修改为:

 

//对象和数组的深拷贝 
  
Object.clone = function(sObj){ 
  
        if(typeof sObj !== "object"){ 
  
            return sObj; 
  
        } 
  
        var s = {}; 
  
        if(sObj.constructor == Array){ 
  
            s = []; 
  
        } 
  
        for(var i in sObj){ 
  
            s[i] = Object.clone(sObj[i]); 
  
        } 
  
        return s; 
  
   }  
 

 

原文链接: http://www.footya.com/?action=show&id=123



已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [js 对象 拷贝] 推荐:

js对象深拷贝

- - ITeye博客
在做一个前台页面你的时候用到了一个自己写的List对象,在进行深拷贝的时候参考了网上的代码:. //对象扩展,tObj被扩展对象,sObj扩展对象. Object.extend(a,b);//a获得了b的所有属性. 我自己定义的list中没有定义constructor,所以执行sObj.constructor == Array会报错,我就修改为:.

JS的event对象--知识点总结

- - CSDN博客推荐文章
Event描述:event代表事件的状态,例如触发event对象的元素、鼠标的位置及状态、按下的键等等. 需要注意的是:event对象只在事件发生的过程中才有效. event的某些属性只对特定的事件有意义. 比如,fromElement 和 toElement 属性只对 onmouseover 和 onmouseout 事件有意义.

eclipse中默认js编辑器非常慢,尤其在拷贝粘贴代码时的解决方法

- - CSDN博客Web前端推荐文章
使用的是官网标准版的eclipse3.9 for javaEE未装任何插件,写JS时卡的简直无法忍受,尝试去掉所有的validate,包括菜单和项目属性中的都无作用,后来在项目根目录..project中发现以下红色行居然Validator都还在,把红色对应的配置段全部删去后,问题解决,编辑JS再也不似蜗牛了..

js字符串转换为Json对象的三种写法

- - JavaScript - Web前端 - ITeye博客
在进行web前端开发时,经常会遇到将js字符串转换成Json对象的情况,这种转换有三种写法:. 1.使用eval()来进行解析(最原始的写法,但却很有效). 这种写法适合从数据库取出json字符串,然后需要进行转换为json对象的方式. 2.使用new function()的方式.  3.使用JSON的转换方法.

JS获取当前对象大小以及屏幕分辨率等

- - JavaScript - Web前端 - ITeye博客
JS获取当前对象大小以及屏幕分辨率等. s += " 网页可见区域宽:"+ document.body.clientWidth+"\n";. s += " 网页可见区域高:"+ document.body.clientHeight+"\n";. s += " 网页可见区域宽:"+ document.body.offsetWidth + " (包括边线和滚动条的宽)"+"\n";.

WebView JS 交互

- - ITeye博客
WebView加jquery做页面会怎么样呢. // 创建WebView对象. // 把programList添加到js的全局对象window中,. // 这样就可以使用window.programList来获取数据. * 定义js回调java函数. // 绑定键盘的向上,向下按钮事件触发相应的js事件.

JS游戏引擎

- 米随随 - HTML5研究小组
If you don’t have anything better to do and want to help fellow redditors interested in JS game dev out, feel free to fork the list and modify it as you like.

來源請求.js

- 红烧鲤鱼 - Blog: timdream
很早以前就想講了,但講了大概又會被戰. 相較於英文維基百科,中文維基百科在社會和歷史條目充滿了 systemic bias. 但是那些主觀論述又不是編輯者有意加進去的,而是某種編輯者存在的社會所給予的暗示(Inception?)與集體共識,而不是原本百科全書應該有的可驗證的事實. 因為是暗示又是共識,所以有自覺的百科編輯者反而是少數;中文維基只好長成現在這個樣子了.

Js删除节点

- - JavaScript - Web前端 - ITeye博客
 方式一:传this参数调用方法:.  方式二:js方法中通过选择器获取节点:. //此处删除的是a节点 }. 方式三:通过jQuery方式获取节点:(尚未测试,有待测试. 此处a标签传this到js中,js通过this(即a节点)取parent(即p节点). (1)p.remove();可直接删除整个p节点.

JS游戏引擎列表

- sku - 酷壳 - CoolShell.cn
这里有一个网址收集了关于JS游戏引擎开发库的一个列表,转过来. 关于使用JS和HTML5做的一些小游戏,可参见《HTML5 小游戏展示》. Name Latest Release License Type Notes The Render Engine 1.5.3 MIT 跨浏览器; 大规模 API; 开源. 2 gameQuery 0.5.1 CC BY-SA 2.5 和 jQuery 一起使用 gTile 0.0.1 Tile based.