zoukankan      html  css  js  c++  java
  • clone对象

      在JavaScript中,当对象作为参数传给函数的时候,在函数内部对这个对象的属性进行修改时,函数外部的对象属性也会跟着被修改,而有些时候我们并不想原来的对象数据发生改变,这时候就需要切断对象之间的引用关系,clone一个对象副本。

      在JavaScript中,clone对象最简单的方法就是使用JavaScript内置函数JSON.stringify先将对象转换为字符串,再调用内置函数JSON.parse将字符串转换为JavaScript 对象,这就可以得到一个对象副本了。代码十分简单:

    //clone对象
    //obj:需要被clone的对象
    function objClone(obj)
    {
    	return JSON.parse(JSON.stringify(obj));
    }
    

      当然你也可以自己编写函数来实现对象的克隆,代码相对比较复杂些:

    //clone对象
    //obj:需要被clone的对象
    //attr:需要clone的对象属性数组
    function objClone(obj,attrs)
    {
    	var res = {};
    	var is_arr = true;
    	if(typeof(obj)==='undefined' || res===null) return res;
    	if(typeof(obj) != 'object') return obj;
    
    	if(!(attrs instanceof Array)) {
    		attrs = obj;
    		is_arr = false;
    	}
    	var attr,i;
    	for(i in attrs) {
    		attr = is_arr ? attrs[i] : i;
    		if(obj.hasOwnProperty(attr)) {
    			if(obj[attr] instanceof Array) {
    				res[attr] = arrClone(obj[attr]);
    			} else if(obj[attr] instanceof Object) {
    				res[attr] = objClone(obj[attr]);
    			} else {
    				res[attr] = obj[attr];
    			}
    		}
    	}
    	return res;
    }
    
    //克隆数组
    //arr:需要被clone的数组
    function arrClone(arr)
    {
    	var res = [];
    	if(typeof(arr)==='undefined' || arr===null) return res;
    	if(!(arr instanceof Array)) return arr;
    
    	var i;
    	for(i in arr) {
    		if(arr[i] instanceof Array) {
    			res[i] = arrClone(arr[i]);
    		} else if(arr[i] instanceof Object) {
    			res[i] = objClone(arr[i]);
    		} else {
    			res[i] = arr[i];
    		}
    	}
    	return res;
    }
      
    

      

  • 相关阅读:
    代码希望HTML5初探CSS3新特性小示例
    myeclipse及eclipse的优化
    window7如何提高到最高权限
    大麦茶
    poj3292
    poj3278
    poj3100
    poj3117
    poj3299
    Presto性能调优的五大技巧
  • 原文地址:https://www.cnblogs.com/wujuntian/p/5676644.html
Copyright © 2011-2022 走看看