js深度克隆
function highClone(oldObj){
var cloneObj;
  if(oldObj.constructor==Object || oldObj.constructor==Array){
    cloneObj=new oldObj.constructor;
  }else{
    cloneObj=new oldObj.constructor(oldObj.valueOf());//个人认为这样没什么用,因为克隆方法用于复制对象,其他实例不适用,此处还不如换成return
  }
for(var i in oldObj){
    if(typeof oldObj[i]=="object"){
      cloneObj[i]=highClone(oldObj[i]);
    }else{
      cloneObj[i]=oldObj[i];
    }  
  }
  cloneObj.toString=oldObj.toString;
  cloneObj.valueOf=oldObj.valueOf;
  return cloneObj;
}
//测试
var testObj={"1":[1,2,3],"2":{"aa":"aa","bb":"bb"},"3":function(){var dd="";}};
		var testArr=[[1,2,3],{"aa":"aa","bb":"bb"},function(){var dd="";}];
var arrClone=highClone(testArr);
		var ObjClone=highClone(testObj);
js深度克隆的更多相关文章
- js深度克隆对象
		
js深度克隆对象 js深度克隆对象简单的记录一下,如下代码: var obj = { typeOf: function(obj) { const toString = Object.prototype ...
 - js深度克隆对象、数组
		
function deepCopy(o) { if (o instanceof Array) { var n = []; for (var i = 0; i < o.length; ++i) { ...
 - js对象的深度克隆
		
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
 - 深度克隆---js对象引用
		
首先,我们要知道,javascript中除了基本类型(number,string,boolean,null,undefined)之外就是引用类型了,也可以说就是js对象了. 引用类型的赋值其实是对象保 ...
 - JS的深度克隆,利用构造函数原型深度克隆
		
我爱撸码,撸码使我感到快乐!大家好,我是Counter.今天来写写,JS中的深度克隆,这个在笔面试中,考的还是比较多的,主要是对象与数组的赋值,如果直接赋值的话,那么得到的是对象或者数组在堆里的地址, ...
 - js实现数组、对象深度克隆的两种办法
		
1.深度克隆的原理 JS中的深度克隆,指的是原对象改变了,克隆出来的新对象也不会改变,原对象与新对象是完全独立的关系. 实现深度克隆的原理得从对象是一种引用类型说起 众所周知,对象是一种引用类型,对象 ...
 - js之深度克隆、简易克隆
		
一.js中的对象 谈到对象的克隆,必定要说一下对象的概念. js中的数据类型分为两大类:原始类型和对象类型. (1)原始类型包括:数值.字符串.布尔值.null.undefined(后两个是特殊的原始 ...
 - JS对象深度克隆
		
首先看一个例子: var student = { name:"yxz", age:25 } var newStudent = student; newStudent.sex = & ...
 - js对象简单、深度克隆(复制)
		
javascript的一切实例都是对象,只是对象之间稍有不同,分为原始类型和合成类型.原始类型对象指的是字符串(String).数值(Number).布尔值(Boolean),合成类型对象指的是数组( ...
 
随机推荐
- TCP的组包、半包、粘包与分包
			
一.概念 1)组包.简单的说就是tcp协议把过大的数据包分成了几个小的包传输,接收方要把同一组的数据包重新组合成一个完整的数据包. 2)半包.指接受方没有接受到一个完整的包,只接受了部分,这种情况主要 ...
 - P1616 疯狂的采药 (完全背包优化)
			
(点击此处查看原题) 题意 简单来说,就是一个完全背包,不过这里卡住了常规的完全背包写法,时间复杂度为O( V*∑( V/c[i] ))如下所示: ;i <= n ;i ++) { scanf( ...
 - dij 费用流
			
#include <bits/stdc++.h> using namespace std; typedef long long lld; const int MAXN = 50010, M ...
 - 数据库连接池的sqlhelper
			
import pymysql import threading from DBUtils.PooledDB import PooledDB """ storage = { ...
 - C# 操作地址 从内存中读取写入数据(初级)
			
本示例以植物大战僵尸为例, 实现功能为 每1秒让阳光刷新为 9999.本示例使用的游戏版本为 [植物大战僵尸2010年度版], 使用的辅助查看内存地址的工具是 CE. 由于每次启动游戏, 游戏中阳光 ...
 - CF10D-LCIS题解--线性DP+打印方案
			
题目链接: https://www.luogu.org/problemnew/show/CF10D 方法一 分析 \(LCS\)和\(LIS\)已经成烂大街的知识了,可是当这两个合并起来成为\(LCI ...
 - PHP之开发环境搭建
			
日常开发中,环境的搭建是我们开发的基础,这里介绍几种快速搭建PHP开发环境的方式. 1)lnmp一键安装包[https://lnmp.org] LNMP一键安装包是一个用Linux Shell编写的可 ...
 - Linux之远程文件传输
			
1)scp scp命令用于在Linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器,而且scp传输是加密的.可能会稍微影响一下速度.当你服务器硬盘变为只读re ...
 - 深入学习Mybatis框架(一)- 入门
			
1.什么是Mybatis? Mybatis是一个优秀持久层框架,提供了对数据库的一系列操作(增删改查).Mybatis可以避免重复的写JDBC代码,让我们以较少的代码实现对数据库的操作,从而提高开发效 ...
 - 【转】vm ubuntu14.04 建立共享文件夹
			
第一步:启动Ubuntu 14.04(其他版本的Ubuntu操作差不多) 1. 在VMware虚拟机界面,点VM->Install VMware Tools.之后,显示如下图: ...