js实现深拷贝和浅拷贝

浅拷贝:

思路----------把父对象的属性,全部拷贝给子对象,实现继承。

问题---------如果父对象的属性等于数组或另一个对象,那么实际上,子对象获得的只是一个内存地址,不会开辟新栈,不是真正拷贝,因此存在父对象被篡改的可能。

代码:

function deepCopy(o){
    var f = {};
    for(i in o){
        f[i] = o[i];
    };
    return f
}

深拷贝:

思路-----------递归调用'浅拷贝',可以解决子对象修改时会污染父对象,此时两个对象指向的不是一个内存地址。

代码:

function deepCopy(p,c){  // p 父级对象  c 子集对象 
  var c = c || {};
   for(let i in p){
      // 如果父级对象的其中一个属性是对象
      if(typeof p[i]==='object'){
        
           c[i] = (p[i].constructor===Array)?[]:{}; //通过判断父级对象的属性的constructor的类型,指定子集对象属性的类型

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏前端菜鸟变老鸟

Object.keys和Object.values

使用Object.keys()或者Object.values()获取循环变量,渲染的时候根据循环变量获取值。Object.keys()函数返回索引(不仅仅是数字...

772
来自专栏运维小白

9.4sed(上)

sed工具 sed -n '5'p test.txt sed -n '1,5'p test.txt sed -n '1,$'p test.txt sed -n ...

1798
来自专栏个人随笔

房上的猫:if选择结构

一.基本if结构: ? ?  1.定义:if选择结构是根据条件判断之后再做处理的一种语法结构!  2.逻辑:首先对条件进行判断   >如果为真,则执行代码块 ...

35912
来自专栏佳爷的后花媛

$this、self和static

$this 只有在类产生实例之后才会存在,我们只是设置一个属性,此时不存在 $this,下图会产生语法错误。

1512
来自专栏一个爱吃西瓜的程序员

Python基础学习-操作列表

一 :遍历整个列表 1:使用for循环来遍历列表: 例: ? 输出: ? 二:避免缩进错误 1:Python根据缩进来判断代码行与前一个代码行的关系。 2:...

2814
来自专栏finleyMa

说下js中的bind

bind的受体是对象,返回的是个新的函数。 我们知道this总是指向调用他的对象。但是有时候我们希望‘固化’这个this。 也就是无论怎么调用这个返回的函数...

4271
来自专栏Golang语言社区

Golang语言--变量作用域

作用域为已声明标识符所表示的常量、类型、变量、函数或包在源代码中的作用范围。 Go 语言中变量可以在三个地方声明: 函数内定义的变量称为局部变量 函数外定义的变...

3446
来自专栏hbbliyong

12个非常有用的JavaScript技巧

在这篇文章中,我将分享12个非常有用的JavaScript技巧。这些技巧可以帮助你减少并优化代码。  1) 使用!!将变量转换成布尔类型 有时,我们需要检查...

2677
来自专栏闻道于事

JavaScript表单验证和正则表达式

JavaScript表单验证 ? 分为四类:   1.非空验证     常用于用户名等   2.相等验证     常用于验证两次输入的密码   3.范围验证  ...

4887
来自专栏Golang语言社区

厚土Go学习笔记 | 09. 类型转换 与 类型推导

在Go语言中,不同类型的项之间赋值时,需要显式转换。 表达式 T(v) 将值 v 转换为类型 T 。 var i int = 42 var f float64 ...

35410

扫码关注云+社区