zoukankan      html  css  js  c++  java
  • JavaScript 对象克隆的3种方式

    JavaScript 并非绝对化的面向对象的语言,里面也有很多非结构化和结构化的数据。赋值语句并不能复制结构化的数据对象。

    例如: 

    var S1 = []
    var A = obj(),
    var B = obj();
    Stack.push(A);
    Stack.push(B);

    Var S2 = []
    S2 = S1;

    S1是一个对象数组,里面放了两个对象数据A和B,在赋值操作的时候,A,B对象不会被创建,而只是指向A,B的链接。

    下面三种方式,可以实现对象的克隆:
    1、 如果你知道A,B的数据结构信息,直接写克隆函数,创建A,B中的类对象,子类对象,然后将S1这些对象条件到S2中去。

    2、深度复制对象,将对象一层一层的扒开,迭代的方式将里面的实例创建并赋值。
    //深复制对象方法
    var cloneObj2 = function (obj) {
    var newObj = {};
    if (obj instanceof Array) {
    newObj = [];
    }
    for (var key in obj) {
    var val = obj[key];
    newObj[key] = typeof val === 'object' ? cloneObj2(val): val; // 如果是对象,迭代
        }
    return newObj;
    };

    3. JSON将数据序列化,
    function cloneObj(obj) {
    //1
    var newJsonObj = {};
    newJsonObj = JSON.parse(JSON.stringify(obj));
    //2
    for (items in obj) {
    if (typeof obj[items] == "function" || typeof obj[items] == "undefined" || obj[items] instanceof RegExp) {
    newJsonObj[items] = obj[items];
    }
    }
    //3
    var newObj = new obj.constructor;
    for (items in newJsonObj) {
    newObj[items] = newJsonObj[items]
    }
    return newObj;
    }
  • 相关阅读:
    网站备份list
    vnc checklist
    appnode iptables 规则后面覆盖前面的
    Appnode + Discuz checklist
    解决WORD文档无法显示链接的图像问题
    应用容器Application container
    要研究的内容
    转 Flex MXML编译成AS类
    Flex文件结构
    int a
  • 原文地址:https://www.cnblogs.com/montai/p/13217268.html
Copyright © 2011-2022 走看看