代码的深复制学习

深复制的理念

浅复制只是该换地址等于网页换肤,深复制是连着你得内核也给克隆了,这叫深复制。

js深复制代码如下

function cloneObject(source,target){
        if(target===undefined){
            if(Node.prototype.isPrototypeOf(source)){
                target=document.createElement(source.nodeName);
                target.style=source.style.cssText;
            }else if(source.constructor===Uint8Array){
                target=new source.constructor(Array.from(source));
            }else if(source.constructor===Date || source.constructor===RegExp || source.constructor===Set || source.constructor===Map){
                target=new source.constructor(source);
            }else if(source.constructor===Function){
                var arg=source.toString().match(/\((.*?)\)/)[1];
                var content=source.toString().replace(/\n|\r/g,"").match(/\{(.*)\}/)[1];
                target=new Function(arg,content)
            }else {
                target=new source.constructor();
            } 
        }
        
        var names=Object.getOwnPropertyNames(source).concat(Object.getOwnPropertySymbols(source));
        for(var i=0;i<names.length;i++){
            if(names[i]==="prototype") continue;
            var desc=Object.getOwnPropertyDescriptor(source,names[i]);
           if((typeof desc.value==="object" && desc.value!==null) || typeof desc.value==="function"){
              var o=cloneObject(desc.value)
              Object.defineProperty(target,names[i],{
                  value:o,
                  enumerable:desc.enumerable,
                  writable:desc.writable,
                  configurable:desc.configurable
              })
           }else{
                Object.defineProperty(target,names[i],desc);
           }
        }
        return target;
    }

这个深复制功能及其强大大家请欣赏

此处为案例

 var d = Symbol();
      var e = Symbol();
      var ss = { a: 1 };
      var date = new Date();
      var divs=document.createElement("div");
      divs.setAttribute("a","3");
      date.setFullYear(2022);

       
      var obj = {
        a: 1,
        b: 2,
        c: [1, 2, 3],
        zz: new Set([1, 2, ss]),
        yy: new Map(),
        [d]: "aaa",
        z: divs,
        d: {
          e: date,
          f: /a/g,
          g: function (s) {
            console.log(s);
          },
          h: {},
        },
      };
      obj.d.g.ssss=10;
      obj.eee=new Uint8Array([97,98,99]);
      Object.defineProperties(obj.d.h, {
        i: {
          value: 10,
        },
        j: {
          configurable: true,
          writable: true,
          value: [1, 2, 3, 4],
        },
        k: {
          writable: true,
          value: {
            l: {},
            m: "abcde",
            n: true,
            o: [1, 2, 3],
          },
        },
        [e]: {
          value: ["a", "b", "c", "e"],
        },
      });
      obj.z.style.width = "50px";
      obj.z.style.height = "50px";
      obj.z.style.backgroundColor = "red";

      Object.defineProperties(obj.d.h.k.l, {
        p: {
          value: function () {
            console.log("p");
          },
        },
        q: {
          value: {
            r: { a: 1 },
            j: { b: 2 },
          },
        },
      });
      var a_1 = { a: 1 };
      var a_2 = { b: 2 };
      obj.yy.set("name", "xietian");
      obj.yy.set(a_1, a_2);

      Object.defineProperty(obj, "www", {
        set: function (_v) {
          this.a = _v;
        },
        get: function () {
          return this.a;
        },
      });

此处为深复制完成之后的东西

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 当然,这是Java中最基本的"Hello, World!"程序的源代码: ```java public class HelloWorld { public static void main(String[] args) { System.out.println("Hello, World!"); } } ``` 请注意,Java程序始终从具有相同名称的类开始执行,因此我们在这里定义了一个名为"HelloWorld"的公共类,并在其中定义了一个名为"main"的公共静态方法。 "main"方法是Java程序的入口点。在这个方法中,我们使用System.out.println方法打印出"Hello, World!"消息。 ### 回答2: Java HelloWorld代码源码如下: ```java public class HelloWorld { public static void main(String[] args) { System.out.println("Hello, World!"); } } ``` 这段简单的代码用于输出"Hello, World!"的信息。代码首先定义了一个名为HelloWorld的公开类。在类中,有一个名为main的公开静态方法,它是程序的入口。main方法的参数是一个String类型的数组args,它允许在命令行中传入一些参数。 在main方法中,使用System.out.println()方法打印出了"Hello, World!"的信息。System是Java中包含了很多标准输入输出操作的类,println()是其中的一个方法,用于将指定的内容打印到控制台并换行。 编译和执行该代码后,就会在控制台上输出"Hello, World!"的信息,作为Java语言学习的入门示例,一般情况下,我们第一个学习和运行的程序就是HelloWorld。这段代码简单明了,帮助我们快速了解并验证Java开发环境的正确性。 ### 回答3: Java是一种面向对象的编程语言,编写Java代码时,通常从编写一个简单的“Hello World”程序开始,以验证开发环境是否配置正确。下面是一个简单的Java代码示例,打印出"Hello World"的信息: ```java public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } } ``` 以上代码包括一个名为HelloWorld的公共类,该类具有一个公共的静态void类型的main方法。在main方法中,使用System.out.println语句打印出"Hello World"的字符串。 Java代码的编译和执行步骤如下: 1. 打开Java开发工具(如Eclipse或IntelliJ IDEA)。 2. 创建一个新的Java项目,并在项目中创建一个名为HelloWorld的类。 3. 将上述代码复制到HelloWorld类中。 4. 保存代码并编译程序。 5. 执行程序。 在控制台中,您将看到输出结果"Hello World"。这个程序虽然简单,但可以确认编程环境是否正常工作,并且可以用作其他更复杂Java程序的起点。 通过编写这样简单的"Hello World"程序,可以加对Java语言的理解,同时也是开始学习和掌握更复杂Java编程知识的第一步。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值