Javascript 对象复制
如果对象只是一个数据集,可采用json化再反json化的方式克隆一个对象,这个过程会丢失对象的方法。效率比较低。
可以采用如下递归的方式复制一个对象。
function clone(target) {
        var buf;
        if (target instanceof Array) {
            buf = [];  //创建一个空的数组
            var i = target.length;
            while (i--) {
                buf[i] = clone(target[i]);
            }
            return buf;
        }else if (target instanceof Object){
            buf = {};  //创建一个空对象
            for (var k in target) {  //为这个对象添加新的属性
                buf[k] = clone(target[k]);
            }
            return buf;
        }else{
            return target;
        }
    } 
这里注意Array的判断一定要在前面,因为数组也是一个Object(funcion也是),所以如果Object的判断在前就不会走到Array的判断了。
引申一下
var obj={};
var ary=[];
var fn=funcion(){};
alert(typeof obj) ;//object
alert(typeof ary) ;//object
alert(typeof fn) ;//function
alert(obj instanceof Object);//true
alert(ary instanceof Object);//true
alert(ary instanceof Array);//true
alert(fn instanceof Object);//true
alert(fn instanceof Function);//true
另外还找到一种方式
Object.prototype.Clone = function(){
    var objClone;
    if (this.constructor == Object){
        objClone = new this.constructor();
    }else{
        objClone = new this.constructor(this.valueOf());
    }
    for(var key in this){
        if ( objClone[key] != this[key] ){
            if ( typeof(this[key]) == 'object' ){
                objClone[key] = this[key].Clone();
            }else{
                objClone[key] = this[key];
            }
        }
    }
    objClone.toString = this.toString;
    objClone.valueOf = this.valueOf;
    return objClone;
} 
Javascript 对象复制的更多相关文章
- JavaScript对象复制(一)(转载)
		在JavaScript很多人复制一个对象的时候都是直接用"=",因为大家都觉得脚本语言是没有指针.引用.地址之类的,所以直接用"="就可以把一个对象复制给另外一 ... 
- JavaScript对象复制
		近期项目因为怕数据污染所以用到了js的对象复制 js里的对象都是继承自object,是引用类型,所以无法通过=号复制 所以整理了一些常用的复制方法,如下 一.通过JSON序列化和反序列化创建新的对象 ... 
- Javascript 对象复制(深浅拷贝)
		一.数据类型分类: 基本变量 引用类型 二.什么叫做指针指向 栈内存.堆内存.指针指向(如下红圈圈的斜线). 三.赋值.拷贝.引用区别? 赋值指一个变量赋予某个值,包含两种方式,一种是直接量,另一种, ... 
- JavaScript对象复制(二)
		<script> function copy(a) { ret = {}; for (sth in a) { temp = a[sth]; if (temp instanceof Arra ... 
- 【转】JavaScript中的对象复制(Object Clone)
		JavaScript中并没有直接提供对象复制(Object Clone)的方法.因此下面的代码中改变对象b的时候,也就改变了对象a. a = {k1:1, k2:2, k3:3}; b = a; b. ... 
- JavaScript对象的深浅复制
		前言 从层次上来看,对象的复制可以简单地分为浅复制和深复制,顾名思义,浅复制是指只复制一层对象的属性,不会复制对象中的对象的属性,对象的深复制会复制对象中层层嵌套的对象的属性. 在复制对象时,除了要复 ... 
- 如何深度复制一个javascript对象
		前言 最近有人问我,如何将一个对象复制一份,因为他遇到了一个需求,需要将后端获取的数据,保存一份,原始数据会因为交互而发生变化,最终需要对比两份数据的异同. 他是一个刚入行的小朋友,他的实现方式就是新 ... 
- web前端学习(二)  javascript对象和原型继承
		目录 1. JavaScrpt对象 2. 原型对象和继承 3. 对象的克隆 (1)javascript对象 在JS中,对象是属性的容器.对于单个对象来说,都由属性名和属性值构成:其中属性名需要是标识符 ... 
- JS对象复制
		在JavaScript很多人复制一个对象的时候都是直接用"=",因为大家都觉得脚本语言是没有指针.引用.地址之类的,所以直接用"="就可以把一个对象复制给另外一 ... 
随机推荐
- Python全栈学习_day007作业
			Day7作业及默写 .把列表中所有姓周的人的信息删掉(升级题:此题有坑, 请慎重): 第一种方法:lst = ['周老二', '周星星', '麻花藤', '周扒皮'] # 结果: lst = ['麻花 ... 
- window的cmd命令行下新增/删除文件夹及文件
			新增文件夹 (md / mkdir) md <folderName>: folderName 就是文件路径,只输入文件夹名称时表示在当前目录下创建文件夹. 比如:md F:\test\pr ... 
- Bootstrap里的文件分别代表什么意思及其引用方法
			关于Bootstrap打包的文件分别代表什么意思,官网也没有给出一个明确的解释,在网上查了一些资料,总价归纳了如下: bootstrap/ <!--主目录--> ├── css/ < ... 
- 视觉slam领域经典综述和具体应用场景
			一.经典综述文章 1. Durrant-Whyte H, Bailey T. Simultaneous localization and mapping: part I[J]. IEEE robot ... 
- (网页)Java日志记录框架Logback配置详解(企业级应用解决方案)(转)
			转自CSDN: 前言 Logback是现在比较流行的一个日志记录框架,它的配置比较简单学习成本相对较低,所以刚刚接触该框架的朋友不要畏惧,多花点耐心很快就能灵活应用了.本篇博文不会具体介绍Logbac ... 
- JavaScript大杂烩0 - WEB基础知识
			1. 协议小结:HTTP协议与TCP/IP协议 现代Web应用开发的基础是HTTP协议,那么HTTP协议与我们熟知的TCP/IP协议有什么关系呢? 这个要从网络通信模型说起,简单的说,计算机通信就像两 ... 
- 泛化之美--C++11可变模版参数的妙用
			1概述 C++11的新特性--可变模版参数(variadic templates)是C++11新增的最强大的特性之一,它对参数进行了高度泛化,它能表示0到任意个数.任意类型的参数.相比C++98/03 ... 
- 基于 node 搭建博客系统(一)
			系统分为两端,分别实现. 管理员端: 功能 :个人信息,设置,发布随笔,随笔列表,删除随笔,查找,文章 等. 技术点:Boostrap + AdminLTE; 基于nodejs 实现的express ... 
- python第六十天-----RabbitMQ
			RabbitMQ消息队列:默认为消息轮循模式,按client端启动是顺序接收 server端 import pika connection = pika.BlockingConnection(pika ... 
- SQL中的每一张表都必须设有主键吗
			问题描述: 公司的数据库表有时候会看到没有主键的,SQL中的每一张表都必须设有主键吗? 主键的作用: 1)保证实体的完整性: 2)加快数据库的操作速度: 3)在表中添加新记录时,数据库ACCESS会自 ... 
