在js里没有类似JAVA的clone方法,无法实现对对象的克隆,一般使用等号操作符来传递对象,但这样就造成了指针关联问题,修改任何一个对象,其关联的对象也会被改变,但很多时候我们只想得到一个对象的拷贝,而非引用。今日偶就遇到了这个问题,以前还真没有注意过这个,朋友给找了两个方法,感觉写的都不错。只是实现稍有不同,但大体原理是相对的,即逐项复制对象内容。
相信这段代码对很多web开发的朋友都会有用。
方法一:定义一个clone方法来实现。
function clone(myObj){
if(typeof(myObj) != 'object') return myObj;
if(myObj == null) return myObj;
var myNewObj = new Object();
for(var i in myObj)
myNewObj[i] = clone(myObj[i]);
return myNewObj;
}
方法二:通过object原型扩展实现
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;
}
分享到:
相关推荐
浅克隆只是复制对象的引用,而深克隆则是递归复制原对象中的所有层级的对象。在文章内容中,并没有具体实现克隆对象的相关代码,但常见的实现方法是通过遍历原对象的所有属性,然后将它们一个个复制到新对象中。这个...
使用`zInherit`这种方式进行对象继承的好处在于,它可以保持对象的实例属性,避免了构造函数继承中的属性复制问题。同时,由于直接操作原型,它能够有效地利用原型链实现属性的查找和继承。 然而,`zInherit`也存在...
- 使用jQuery.extend()进行深复制:这个方法的第二个参数为true表示执行深复制,也就是会递归复制对象的每个层级,适用于需要复制对象内嵌对象或数组的情况。 示例代码: ```javascript var newJson = jQuery....
本文将详细介绍JavaScript中的DOM节点克隆,包括浅复制和深复制的区别。 一、DOM节点克隆基本概念 DOM节点克隆是通过调用`cloneNode()`方法实现的。这个方法接受一个布尔参数,如果为`true`,则执行深复制;如果为`...
2. 深度克隆:深度克隆会递归地复制对象的所有属性,包括嵌套的对象和数组。这意味着即使对象的属性包含其他对象,克隆后的对象也将拥有独立的副本,修改克隆对象的属性不会影响原始对象。 以下是一个实现深度克隆...
JavaScript面向对象是编程语言JavaScript的一个核心概念,它允许开发者通过对象来封装数据和操作数据的方法。在这份教程中,将详细介绍JavaScript面向对象的基础知识点,并通过代码示例来阐述如何在JavaScript中创建...
在JavaScript中,创建类和对象是面向对象编程的基础。本文将详细介绍几种常见的创建对象的方法,包括它们的特点和优缺点。 5.1 工厂方法 工厂方法是一种创建对象的模式,通过一个函数来创建具有特定属性和行为的...
创建新数组并复制对象属性 在给定的代码片段中,通过循环遍历原始的JSON对象数组,并创建一个新的数组,同时复制每个对象的属性到新对象中。这样的操作通常是为了对数据进行进一步的处理或者更改,而保持原始数据...
`Object.assign()`是另一个用于合并对象的方法,它可以将一个或多个源对象的属性复制到目标对象中。例如: ```javascript let obj1 = { a: 1, b: 2 }; let obj2 = { c: 3, d: 4 }; let newObj = Object.assign...
在HTML和JavaScript的世界里,"克隆标签"指的是在网页动态操作中复制并添加或替换现有HTML元素的技术。这项技术广泛应用于网页交互、数据展示以及表单处理等场景,允许开发者在用户界面上创建新的元素或者复制已有的...
浅拷贝只会复制对象的顶层属性,而深拷贝会递归复制整个对象及其嵌套的对象或数组。 1. **浅拷贝**:当仅传递两个对象作为参数时,`jQuery.extend(target, source)`,`target` 对象将接收 `source` 的属性,但不会...
面向对象编程(Object-Oriented Programming,OOP)是编程中的一个重要概念,JavaScript也支持面向对象的特性,尽管它并非一种传统的面向对象语言。在这个“JavaScript面向对象基础”的资料中,我们将会探讨...
JavaScript的对象是引用类型,浅拷贝只会复制对象的引用,而深拷贝会创建一个新的独立对象。可以使用`JSON.parse()`和`JSON.stringify()`实现简单的深拷贝,但这种方法不适用于包含函数或循环引用的对象: ```...
浅复制(Shallow Copy)仅复制对象的第一层属性,如果属性值包含引用类型,则这些引用类型的内容不会被复制,仅仅是复制了指向原始数据的指针。而深复制(Deep Copy)则会递归复制所有的层,并且不复制指向原始数据...
- 如果`id`也没有出现过,创建一个新的对象,复制当前对象的`id`和`magicId`到新对象,并将新对象添加到`result`数组中。 - 将当前对象的`magicId`和`id`标记为已出现,即`full[aaa] = true`和`full[bbb] = true`...
在JavaScript中,简单的赋值操作或`Object.assign()`方法只能实现浅拷贝,即只复制对象的最外层属性,而深层嵌套的对象或数组引用不会被复制,它们在原始对象和副本之间共享。相比之下,深度克隆会递归地复制所有...
同时,遍历父对象的属性,将它们复制到子对象中。 - **寄生组合继承**:这是一种更先进的继承方式,它结合了组合继承和寄生继承的优点。寄生组合继承通过创建父对象的一个副本,并将该副本赋给子对象的原型,从而...
在JavaScript中,复制对象是一个常见的需求,特别是在处理复杂的数据结构时。对象的复制有多种方法,每种方法在特定场景下都有其适用性。这里主要介绍两种常见的对象复制方式:浅复制和深复制。 首先,浅复制是创建...