首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

js拷贝拷贝

device-width, initial-scale=1.0"> Document 1234567891011// 在JS...数据类型分为基本数据类型和引用数据类型两种,对于基本数据类型来说,它的值直接存储在栈内存中, // 而对于引用类型来说,它在栈内存中仅仅存储了一个引用,而真正的数据存储在堆内存中// 当基本类型实现浅拷贝...// 当复杂类型实现浅拷贝,新对象与旧对象仍然同时指向堆内存的同一属性,互不独立,相互影响。...// 也就是说当我们创建新数组newArr时,赋予newArr的是arr在栈中的地址(指针), // 其实仍与旧数组arr共享同一个内存,所以修改新数组newArr后,旧数组arr也会被修改// 深拷贝...// 它可以将复杂类型的数据相互独立出来,互不影响 // 深拷贝不会拷贝引用类型的引用,而是将引用类型的值全部拷贝一份,形成一个新的引用类型, // 这样就不会发生引用错乱的问题,使得我们可以多次使用同样的数据

2.5K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    JS 继承

    推荐阅读JS继承相关的书籍章节 《JavaScript高级程序设计第3版》第6章——面向对象的程序设计 6种继承的方案,分别是原型链继承、借用构造函数继承、组合继承、原型式继承、寄生式继承、寄生组合式继承...《JavaScript面向对象编程第2版》第6章——继承 12种继承的方案: 原型链法(仿传统) 仅从原型继承法 临时构造器法 原型属性拷贝法 全属性拷贝法(即浅拷贝法) 深拷贝法 原型继承法 扩展与增强模式...多重继承法 寄生继承法 构造器借用法 构造器借用与属性拷贝法 《ES6标准入门》第21章——class的继承 《深入理解ES6》第9章——JavaScript中的类 《你不知道的JavaScript》...上卷第6章——行为委托和附录A(ES6中的class) 总结 继承对于JS来说就是父类拥有的方法和属性、静态方法等,子类也要拥有。...子类中可以利用原型链查找,也可以在子类调用父类,或者从父类拷贝一份到子类等方案。 继承方法可以有很多,重点在于必须理解并熟。 悉这些对象、原型以及构造器的工作方式,剩下的就简单了。

    2.9K32

    js继承

    类式继承 1.最常用的继承组合模式 —— 借用构造函数 & 设置原型 // 父类 function Parent(name) { this.name = name;...// 设置原型 继承父类this属性以及父类的原型 Child.prototype = new Parent(); 缺点:父构造函数被调用了两次,从而导致同一个属性会被继承两次(this.name...继承了父类自身的属性 继承了父类的原型属性(方法) 基于上面的问题,如果 Child.prototype 不指向 Parent的实例 new Parent(),而是指向 Parent.prototype...原型继承并不涉及到类,这里的对象都是继承自其他对象。...—— 浅复制 & 深复制 继承的目的是为了实现代码复用,所以一个对象要从另一个对象中获取功能,把目标对象的属性和方法复制过来也是一种方法。

    2.6K10

    js库 - 浅拷贝 & 深拷贝

    然后面试中经常会问、业务中也经常会遇到的问题就是深浅拷贝的问题了。 栈内存中简单数据类型直接拷贝就能得到一个副本,但是复杂数据类型的拷贝如果也想得到一个副本,就需要深拷贝了。...浅拷贝: var a = 1; var b = a; 这就是浅拷贝了,虽然你视觉上看上去a = b;但是修改b的值,a不会收影响。因为b是a的一个副本,就像你拷贝了一个文件夹副本一样。...但这种拷贝情况只局限在简单类型的拷贝: string、number、boolean、null、undefiend 如果你拷贝一个数组/对象(以数组为例): var c = [1,2,3]; var d...深拷贝 具体深拷贝就是要理解了复杂类型拷贝的缺点,然后再进行弥补。 既然想要复杂类型也像简单类型那样拷贝一个新数据的话,就不单单是拷贝地址了。...如果循环过程中,数组中嵌套复杂类型,再次递归调用深拷贝方法。 对于对象,新建一个对象,然后for in遍历拷贝非原型值。如果循环过程中,对象中嵌套复杂类型,再次递归调用深拷贝方法。

    2.1K30

    JS专栏】JS对象的浅拷贝与深拷贝

    1. object.assign object.assign 是 ES6 中 Object 的一个方法,该方法可以用于JS 对象的合并等多个用途,其中一个用途就是可以进行浅拷贝。...Object.assign(target, source); console.log(target); // { a: { b: 1 } }; 但是使用 Object.assign 方法有几点需要注意: 它不会拷贝对象的继承属性...我们总结一下浅拷贝的原理: 对基础类型做一个最基本的一个拷贝; 对引用类型开辟一个新的存储,并且拷贝一层对象属性。...Reflect.ownKeys 方法; 利用 Object 的 getOwnPropertyDescriptors 方法可以获得对象的所有属性,以及对应的特性; 结合 Object 的 create方法创建一个新对象,并继承传入原对象的原型链...Object.getOwnPropertyDescriptors(obj) //遍历传入参数所有键的特性 let cloneObj = Object.create(Object.getPrototypeOf(obj), allDesc) //继承原型链

    2.3K40

    js拷贝与深拷贝

    拷贝拷贝了基本类型数据和引用类型数据的指针,叫浅拷贝拷贝的对象里,如果没有引用类型的数据,可以使用浅拷贝,方便快捷。...如果有引用类型,那么存在被篡改的风险,更应该使用深拷贝拷贝方法 1、手撸一个浅拷贝函数 1function shallowClone(obj) { 2 const newObj = {};...("fx is a great girl") 10 } 11} 12var newObj = Object.assign({}, fxObj); 13 3、数组的slice、concat方法 深拷贝...完全拷贝了基本类型和引用类型内部所有数据,叫深拷贝拷贝方法 1、JSON暴力转换 1const obj2=JSON.parse(JSON.stringify(obj1)); 但是这种方式存在弊端,...new Date(obj); 4 if (obj instanceof RegExp) return new RegExp(obj); 5 // 可能是对象或者普通的值 如果是函数的话是不需要深拷贝

    1.1K10

    JS拷贝与浅拷贝

    其实在工作写代码和面试中,会经常碰到这两个概念:深拷贝,浅拷贝。但今天的重点是深拷贝。 下面我将简单介绍下什么是深拷贝,浅拷贝?...深拷贝是将一个Object对象的内容完全拷贝一份给新对象。修改原对象的属性或者属性值,都不会影响新对象。原对象和新对象是完全独立的,互不影响。...今天的重点是深拷贝,浅拷贝没啥可讲的。 talk is cheap,show me the code! 上浅拷贝代码: function shallowCopy(obj) { if (!...3.观察obj3和obj1,可以知道利用JSON.stringify、JSON.parse实现的深拷贝,是可以实现深拷贝的。 我们再给对象加多点属性,比如加个函数。...所以通过JSON.parse和JSON.stringify实现的深拷贝不完美。 那么我分享下我自己写的一个对象深拷贝的方法,这就是我个人比较常用的方案了。

    2.1K10

    JS进阶:继承

    在理解继承之前,需要知道 js 的三个东西: 什么是 JS 原型链 this 的值到底是什么 JS 的new 到底是干什么的 一、什么是 JS 原型链 我们知道 JS 有对象,比如 var obj =...如果你的函数调用不是 call 形式, 请将其转换为 call 形式 三、JS 的 new 到底是干什么的?...缺点: 只能继承父类的实例属性和方法,不能继承原型属性/方法 无法实现复用,每个子类都有父类实例函数的副本,影响性能 3、组合继承 组合上述两种方法就是组合继承。...用原型链实现对原型属性和方法的继承,用借用构造函数技术来实现实例属性的继承。...MyClass.prototype.myMethod = function() { // do something }; Object.assign会把 OtherSuperClass原型上的函数拷贝

    4.4K10

    js的深拷贝和浅拷贝

    说到深拷贝与浅拷贝,为什么会有这两种概念呢,根本原因就在于js的两种数据类型:基本数据类型和引用数据类型,两种数据类型存储方式不同。...JavaScript 中变量的拷贝 js 中的拷贝区分为「浅拷贝」与「深拷贝」。 浅拷贝拷贝只会将对象的各个属性进行依次复制,并不会进行递归复制,也就是说只会赋值目标对象的第一层属性。...那么在遍历的过程中,我们可以考虑使用 hasOenProperty 方法来判断是否过滤掉那些继承自原型链上的属性。...未定义的属性将不会被复制,然而从对象的原型继承的属性将会被复制。 通过循环来实现深拷贝 function copy(arr){ var obj=arr.constructor==Array?...__proto__ = Object.create(null); for (let key in target) { // 相关操作 } 文章参考链接:js深浅拷贝知多少

    1.5K20

    搞定 JS 深浅拷贝

    拷贝与深拷贝的区别 浅拷贝是创建一个新的对象,如果属性是基本类型,拷贝的就是基本类型的值,如果属性是引用类型,拷贝的就是内存地址。如果这个内存地址的值发生了变化,就会影响到其他的对象。...深拷贝是将一个对象从内存中完整拷贝一份出来,从内存中开辟一个新的区域放新对象,并且修改新对象不会影响原对象。 总而言之,浅拷贝只复制指向某个对象的指针,而不复制对象本身,新旧对象还是共享同一块内存。...,但是引用类型拷贝的只是引用地址 深拷贝 function deepClone(obj) { let result = new obj.constructor() if (obj === null...2 ] } console.log('obj2', obj2) // obj2 { name: '小小鑫', arr: [ 1, [ 1, 2 ] ] } niceeeeeeeeee~ 首发自:搞定 JS...深浅拷贝 - 小鑫の随笔

    75730
    领券