XShell ClickHouse 学生排队 Java包装类 HTTP请求 triggers grid 软件测试实战项目 db2从入门到精通 excel动态图表制作 xcode打包 hadoop组件 yml文件注释 完全去vm去虚拟化工具 kafka启动命令 数据库教程 python生成随机数 python的open函数 python正则表达 python字典添加 python环境变量 python设置环境变量 java类 java重写和重载 java语言代码大全 java怎么编译 java网课 linux如何安装 网页游戏开发入门 骁龙660和625 3dmax插件神器 max电池容量 linux多线程编程 c语言指数函数 催眠魔蛙 京东钱包客户端 流水账软件 ansys安装教程 如何用ai设计字体 python列表求和
当前位置: 首页 > 学习教程  > 编程学习

对象的深浅拷贝的理解和区别

2021/1/9 2:04:50 文章标签: 深浅拷贝

对象的深浅拷贝 深浅拷贝的区别 深浅拷贝的区别在于传值和传址 对象存放在堆中,变量实际上是一个存放在栈内存的指针,这个指针指向堆内存中的地址。 对象的浅拷贝 对象的浅拷贝传址,只是将原对象的指针传递给新的对象,当其中…

对象的深浅拷贝

深浅拷贝的区别

深浅拷贝的区别在于传值和传址

对象存放在堆中,变量实际上是一个存放在栈内存的指针,这个指针指向堆内存中的地址。

对象的浅拷贝

对象的浅拷贝传址,只是将原对象的指针传递给新的对象,当其中一个对象中的值改变,那么另一个对象的值同样也会改变。

var obj = {
      param1: '深浅拷贝', param2: 123, say() {
        console.log(this.param1);
      }
    };

当使用浅拷贝时,可以直接赋值

	var obj1 = obj;
    obj1.param1 = '浅拷贝';
    console.log(obj);
    //会发现obj中的param1同样也更改了

对象的深拷贝

对象的深拷贝传值,复制原对象的所有属性,并且对象和原对象相互独立,不受相互影响。

使用json实现深拷贝,但是会造成对象中的方法丢失,不能完全拷贝
 	var obj1 = JSON.stringify(obj);
    obj1 = JSON.parse(obj1);
    obj1.say();
    // Uncaught TypeError: obj1.say is not a function  
使用for-in遍历循环实现深拷贝
	var obj1 = {};
    for (var attr in obj) {
      obj1[attr] = obj[attr]
    }
    console.log(obj1);
    obj1.say();
使用Object.assign()实现深拷贝

当对象中只有一级属性,没有二级属性的时候,此方法为深拷贝,但是对象中有对象的时候,此方法,在二级属性以后就是浅拷贝。

	Object.assign(obj1, obj);
	//将obj合并到obj1上
使用…实现深拷贝
	var obj1 = { ...obj };
使用jQuery的extend方法实现深拷贝
	var obj1 = $.extend({}, obj);

本文链接: http://www.dtmao.cc/news_show_1100284.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?