JavaScript中如何对一个对象进行深度clone

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>深克隆</title>
<script>
function clone(obj)
{
if(typeof obj==‘object‘)
{
if(obj instanceof Array)
{
var result=[];

for(var i=0;i<obj.length;i++)
{
result[i]=clone(obj[i]);
}

return result;
}
else
{
var result={};

for(var i in obj)
{
result[i]=clone(obj[i]);
}

return result;
}
}
else
{
return obj;
}
}

var obj1=[12, {a: 11, b: 22}, 5];
var obj2=clone(obj1);

obj2[1].a+=5;

console.log(obj1, obj2);
</script>
</head>

<body>
</body>
</html>

时间: 2024-08-13 02:22:14

JavaScript中如何对一个对象进行深度clone的相关文章

JavaScript中一个对象进行深度clone

1 function clone(obj) 2 { 3 if(typeof obj!='object'){ 4 return obj; 5 } 6 7 if(obj instanceof Array){ 8 var arr=[]; 9 for(var i=0; i<obj.length; i++){ 10 arr[i]=clone(obj[i]); 11 } 12 return arr; 13 } 14 else if(obj.constructor==Object){ 15 var json=

javascript中闭包的工作原理

一.什么是闭包? 官方”的解释是:闭包是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分.相信很少有人能直接看懂这句话,因为他描述的太学术.其实这句话通俗的来说就是:JavaScript中所有的function都是一个闭包.不过一般来说,嵌套的function所产生的闭包更为强大,也是大部分时候我们所谓的“闭包”.看下面这段代码: 1 2 3 4 5 6 7 function a() { var i = 0; function b() { ale

Javascript中的函数(三)

一:概述 函数是进行模块化程序设计的基础,编写复杂的Ajax应用程序,必须对函数有更深入的了解.JavaScript中的函数不同于其他的语言,每个函数都是作为一个对象被维护和运行的.通过函数对象的性质,可以很方便的将一个函数赋值给一个变量或者将函数作为参数传递.在继续讲述之前,先看一下函数的使用语法:function func1(…){…}var func2=function(…){…};var func3=function func4(…){…};var func5=new Function(

javascript中原型(prototype)与原型链

javascript是一门动态语言(动态语言Dynamic Programming Language:动态类型语言,意思就是类型的检查是在运行时做的,也就是常说的“弱类型”语言),没有类的概念,有class保留字,但不能用作变量名 原型:Javascript中的每一个对象都有一个内部私有的连接指向另一个对象,这个对象就是原对象的原型 注意:原型是一个对象,其他对象可以通过他实现属性继承 原型链:这个原型对象也有自己的原型,直到对象的原型为null为止(也就是没有原型),这种一级一级的链结构就称为

JavaScript中的的垃圾回收机制

JavaScript中的的垃圾回收机制 javascript的垃圾回收原理 (1).在javascript中,如果一个对象不再被引用,那么这个对象就会被GC回收: (2).如果两个对象互相引用,而不再被第3者所引用,那么这两个互相引用的对象也会被回收.

JavaScript中Function函数与Object对象的关系

函数对象和其他内部对象的关系 除了函数对象,还有很多内部对象,比如:Object.Array.Date.RegExp.Math.Error.这些名称实际上表示一个 类型,可以通过new操作符返回一个对象.然而函数对象和其他对象不同,当用typeof得到一个函数对象的类型时,它仍然会返回字符串 "function",而typeof一个数组对象或其他的对象时,它会返回字符串"object".下面的代码示例了typeof不同类型的情况: 以下是引用片段: alert(ty

JavaScript中的函数与闭包

转自javascript深入理解js闭包_javascript技巧_脚本之家 http://www.jb51.net/article/24101.htm 闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现. 一.变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用域. 变量的作用域无非就是两种:全局变量和局部变量. Javascript语言的特殊之处,就在于函数内部可以直接读取全局变量. Js代码 var n=999; fu

理解JavaScript中函数的使用

函数是进行模块化程序设计的基础,编写复杂的Ajax应用程序,必须对函数有更深入的了解. JavaScript中的函数不同于其他的语言,每个函数都是作为一个对象被维护和运行的.通过函数对象的性质,可以很方便的将一个函数赋值给一个变量或者将函数作为参数传递.在继续讲述之前,先看一下函数的使用语法: function func1(…){…} var func2=function(…){…}; var func3=function func4(…){…}; var func5=new Function(

JavaScript 中的对象深度复制(Object Deep Clone)

JavaScript中并没有直接提供对象复制(Object Clone)的方法. JavaScript中的赋值,其实并不是复制对象,而是类似`c/c++`中的引用(或指针),因此下面的代码中改变对象b中的元素的时候,也就改变了对象a中的元素. a = {k1:1, k2:2, k3:3}; b = a; b.k2 = 4; 如果只想改变b而保持a不变,就需要对对象a进行复制. 用jQuery进行对象复制 在可以使用jQuery的情况下,jQuery自带的extend方法可以用来实现对象的复制.