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;
    }
      
    

      

  • 相关阅读:
    机器学习常用算法
    判别式模型与生成式模型
    数据清洗方法
    机器学习项目流程清单
    免费的论文查重网站
    (转载)python应用svm算法过程
    opencv图像阈值设置的三种方法
    Tensorflow读取csv文件(转)
    tensorflow的数据输入
    为什么有些图像在显示前要除以255?(zhuan)
  • 原文地址:https://www.cnblogs.com/wujuntian/p/5676644.html
Copyright © 2011-2022 走看看