js通过一个方法实现对象的深浅拷贝。

众所周知,对象的深浅拷贝是工作中肯定会遇到的问题。所以,今天考虑写个小的功能来记录一下

//type:boolean,true-deep,true为深拷贝,
function extendCopy(type,item){
  if(typeof type != "boolean" || typeof item !=‘object‘){
     return
  }
var newObj = item.constructor ==="Array" ?[]:{};
  if(type){
     if(window.JSON){
          return JSON.parse(JSON.stringify(item));
     }
     else{
        for(prop in item){
           if(getType(item[prop]) ==‘array‘ ||           getType(item[prop]==“object”)){
             newObj[prop]= extendCopy(type,item[prop]);
          }
          else{
             newObj[prop] = item[prop];
          }
        }
     }  

 }
else{
for (prop in item){
newObj[prop] = item[prop];
}
return newObj;

}

}

//实现js内置类型的检测
function getType(o){
      var _toString=Object.prototype.toString;
      var _type={
                 "undefined":"undefined",
                 "number":"number",
                 "boolean":"boolean",
                 "string":"string",
                 "[object Function]":"function",
                 "[object Array]":"array",
                 "[object RegExp]":"regexp",
                 "[object Date]":"date",
                 "[object Erroe]":"error"
        }
        return _type[typeof o]||_type[_toString.call(o)]||(o?"object":"null");
}    
时间: 2024-11-03 21:47:21

js通过一个方法实现对象的深浅拷贝。的相关文章

关于js函数,方法,对象实例的一些说明

朋友们大家好,好久没有更新文章了,最近正好有空就想着写点什么吧,加上这段时间总是能听到一些朋友们问关于js函数,方法,对象实例到底有什么区别这个问题,所以今天就献丑来简单说明一些吧! 其实这些主要都是一些概念上的东西,在这里还是推荐大家多看看诸如<JavaSript权威指南>,<JavaScript高级编程>之类的书籍,当然这些概念如果用代码写出来我相信大家也都还是能够知道的,所以下面我就用文字和代码举一些简单的例子进行说明: 函数:简单的说函数就是,使用function关键字定义

js 的each()方法遍历对象和数组

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <script src="../lib/jquery-1.8.3.min.js" ></script> <script type="

d3.js 封装一个方法更新柱状图,运用数据模板

<script> var width = 400; var height = 400; //创建画布 var svg = d3.select('body') .append('svg') .attr('width',width) .attr('height',height) var padding = {top:20,left:20,right:20,bottom:20} var rectstep = 35; //矩形的宽带偏白 var rectwidth = 30;//矩形的宽 var da

分析一下 原型模式的 UML 类图 。 复制对象, 深浅拷贝 月经贴 ,请回避

js的深浅拷贝

js数据类型包括5种简单数据类型(或者基本数据类型):Undefined, Null, Number, String, Boolean, 指的是保存在栈内存中的简单数据段.还有一种复杂数据类型(引用数据类型):Object Function Array,指的是那些保存在堆内存中的对象. 深浅拷贝只是针对Object,Array这样的复杂对象.javascript存储对象都是存地址. 对象: 浅拷贝只是针对对象的各个属性进行一次复制,复制前后两个属性指向的还是同一块内存地址 深拷贝不仅对各个属性进

python深浅拷贝,集合以及数据类型的补充

1.基础数据类型的补充 1.元组 如果元组中只有一个数据,且没有逗号,则该'元组'与里面的数据的类型相同.如: 1 tu = (1) 2 tu1 = (1,) 3 tu2 = ('alex') 4 tu3 = ([1,2,3],) 5 print(tu,type(tu)) # 1 <class 'int'> 6 print(tu1,type(tu1)) # (1,) <class 'tuple'> 7 print(tu2,type(tu2)) # alex <class 's

[js高手之路]原型对象(prototype)与原型链相关属性与方法详解

一,instanceof: instanceof检测左侧的__proto__原型链上,是否存在右侧的prototype原型. 我在之前的两篇文章 [js高手之路]构造函数的基本特性与优缺点 [js高手之路]一步步图解javascript的原型(prototype)对象,原型链 已经分享过了. function CreateObj(uName) {             this.userName = uName;             this.showUserName = function

JS中的内置对象简介与简单的属性方法

JS中的数组: 1.数组的概念: 数组是在内存中连续存储的多个有序元素的结构,元素的顺序称为下标,通过下标查找对应元素 2.数组的声明: ①通过字面量声明var arr1 = [,,,,] JS中同一数组可以储存多种不同的数据类型(但,同一数组一般只用于存放同种数据类型) 例如var arr1 = [1,"2",true,{"name":"啦啦啦"},[1,2]]; ②通过new关键字声明:var arr2 = new Array(参数); &g

今天和组内一起写代码时碰到了一个关于命名冲突的问题,最后用js命名空间的方法解决的。

//第一步,首先创建一个全局变量,可以放在自己的js方法库中方便以后用,这个就是用来注册命名空间的方法. ns = function(namespace){ var arr = namespace.split('.');  //将传入的字符串如"com.test.lzn"以'.'隔开做成一个数组 var strNamespace = ""; //这个是为了保存每一步循环进去的包名 for(var i=0;i<arr.length;i++) { if(i!=0)