`
yongguang423
  • 浏览: 110574 次
  • 性别: Icon_minigender_1
  • 来自: 山东
社区版块
存档分类
最新评论

Js克隆对象

 
阅读更多

在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; 
}  

 

分享到:
评论

相关推荐

    JS扩展类,克隆对象与混合类实例分析

    浅克隆只是复制对象的引用,而深克隆则是递归复制原对象中的所有层级的对象。在文章内容中,并没有具体实现克隆对象的相关代码,但常见的实现方法是通过遍历原对象的所有属性,然后将它们一个个复制到新对象中。这个...

    js javascript zInherit 对象 继承

    使用`zInherit`这种方式进行对象继承的好处在于,它可以保持对象的实例属性,避免了构造函数继承中的属性复制问题。同时,由于直接操作原型,它能够有效地利用原型链实现属性的查找和继承。 然而,`zInherit`也存在...

    js克隆对象、数组的常用方法介绍

    - 使用jQuery.extend()进行深复制:这个方法的第二个参数为true表示执行深复制,也就是会递归复制对象的每个层级,适用于需要复制对象内嵌对象或数组的情况。 示例代码: ```javascript var newJson = jQuery....

    教你javascript克隆dom结点,浅复制结点,深复制结点

    本文将详细介绍JavaScript中的DOM节点克隆,包括浅复制和深复制的区别。 一、DOM节点克隆基本概念 DOM节点克隆是通过调用`cloneNode()`方法实现的。这个方法接受一个布尔参数,如果为`true`,则执行深复制;如果为`...

    javascript克隆对象深度介绍

    2. 深度克隆:深度克隆会递归地复制对象的所有属性,包括嵌套的对象和数组。这意味着即使对象的属性包含其他对象,克隆后的对象也将拥有独立的副本,修改克隆对象的属性不会影响原始对象。 以下是一个实现深度克隆...

    JS面向对象教程.pdf

    JavaScript面向对象是编程语言JavaScript的一个核心概念,它允许开发者通过对象来封装数据和操作数据的方法。在这份教程中,将详细介绍JavaScript面向对象的基础知识点,并通过代码示例来阐述如何在JavaScript中创建...

    在js中创建类和对象

    在JavaScript中,创建类和对象是面向对象编程的基础。本文将详细介绍几种常见的创建对象的方法,包括它们的特点和优缺点。 5.1 工厂方法 工厂方法是一种创建对象的模式,通过一个函数来创建具有特定属性和行为的...

    js替换json对象.txt

    创建新数组并复制对象属性 在给定的代码片段中,通过循环遍历原始的JSON对象数组,并创建一个新的数组,同时复制每个对象的属性到新对象中。这样的操作通常是为了对数据进行进一步的处理或者更改,而保持原始数据...

    javascript批量添加对象

    `Object.assign()`是另一个用于合并对象的方法,它可以将一个或多个源对象的属性复制到目标对象中。例如: ```javascript let obj1 = { a: 1, b: 2 }; let obj2 = { c: 3, d: 4 }; let newObj = Object.assign...

    htmljs克隆标签

    在HTML和JavaScript的世界里,"克隆标签"指的是在网页动态操作中复制并添加或替换现有HTML元素的技术。这项技术广泛应用于网页交互、数据展示以及表单处理等场景,允许开发者在用户界面上创建新的元素或者复制已有的...

    jQuery实现简单复制json对象和json对象集合操作示例.docx

    浅拷贝只会复制对象的顶层属性,而深拷贝会递归复制整个对象及其嵌套的对象或数组。 1. **浅拷贝**:当仅传递两个对象作为参数时,`jQuery.extend(target, source)`,`target` 对象将接收 `source` 的属性,但不会...

    Javascript面向对象基础.rar

    面向对象编程(Object-Oriented Programming,OOP)是编程中的一个重要概念,JavaScript也支持面向对象的特性,尽管它并非一种传统的面向对象语言。在这个“JavaScript面向对象基础”的资料中,我们将会探讨...

    JS Hash对象

    JavaScript的对象是引用类型,浅拷贝只会复制对象的引用,而深拷贝会创建一个新的独立对象。可以使用`JSON.parse()`和`JSON.stringify()`实现简单的深拷贝,但这种方法不适用于包含函数或循环引用的对象: ```...

    JavaScript 复制对象与Object.assign方法无法实现深复制

    浅复制(Shallow Copy)仅复制对象的第一层属性,如果属性值包含引用类型,则这些引用类型的内容不会被复制,仅仅是复制了指向原始数据的指针。而深复制(Deep Copy)则会递归复制所有的层,并且不复制指向原始数据...

    JS数组中对象去重操作示例

    - 如果`id`也没有出现过,创建一个新的对象,复制当前对象的`id`和`magicId`到新对象,并将新对象添加到`result`数组中。 - 将当前对象的`magicId`和`id`标记为已出现,即`full[aaa] = true`和`full[bbb] = true`...

    一个用于对象深度克隆的同构和可配置javascript函数

    在JavaScript中,简单的赋值操作或`Object.assign()`方法只能实现浅拷贝,即只复制对象的最外层属性,而深层嵌套的对象或数组引用不会被复制,它们在原始对象和副本之间共享。相比之下,深度克隆会递归地复制所有...

    js面向对象笔记

    同时,遍历父对象的属性,将它们复制到子对象中。 - **寄生组合继承**:这是一种更先进的继承方式,它结合了组合继承和寄生继承的优点。寄生组合继承通过创建父对象的一个副本,并将该副本赋给子对象的原型,从而...

    javascript复制对象使用说明

    在JavaScript中,复制对象是一个常见的需求,特别是在处理复杂的数据结构时。对象的复制有多种方法,每种方法在特定场景下都有其适用性。这里主要介绍两种常见的对象复制方式:浅复制和深复制。 首先,浅复制是创建...

Global site tag (gtag.js) - Google Analytics