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

js拷贝拷贝

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

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

JS 继承

构造函数、原型对象和实例之间的关系 要弄懂extends继承之前,先来复习一下构造函数、原型对象和实例之间的关系。...推荐阅读JS继承相关的书籍章节 《JavaScript高级程序设计第3版》第6章——面向对象的程序设计 6种继承的方案,分别是原型链继承、借用构造函数继承、组合继承、原型式继承、寄生式继承、寄生组合式继承...《JavaScript面向对象编程第2版》第6章——继承 12种继承的方案: 原型链法(仿传统) 仅从原型继承法 临时构造器法 原型属性拷贝法 全属性拷贝法(即浅拷贝法) 深拷贝法 原型继承法 扩展与增强模式...多重继承法 寄生继承法 构造器借用法 构造器借用与属性拷贝法 《ES6标准入门》第21章——class的继承 《深入理解ES6》第9章——JavaScript中的类 《你不知道的JavaScript》...上卷第6章——行为委托和附录A(ES6中的class) 总结 继承对于JS来说就是父类拥有的方法和属性、静态方法等,子类也要拥有。

2.8K32

js继承

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

2.5K10

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遍历拷贝非原型值。如果循环过程中,对象中嵌套复杂类型,再次递归调用深拷贝方法。

2K30

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方法创建一个新对象,并继承传入原对象的原型链...; 当参数为 Date、RegExp 类型,则直接生成一个新的实例返回; const isComplexDataType = obj => (typeof obj === 'object' || typeof...Object.getOwnPropertyDescriptors(obj) //遍历传入参数所有键的特性 let cloneObj = Object.create(Object.getPrototypeOf(obj), allDesc) //继承原型链

2.3K40

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拷贝与深拷贝

拷贝拷贝了基本类型数据和引用类型数据的指针,叫浅拷贝拷贝的对象里,如果没有引用类型的数据,可以使用浅拷贝,方便快捷。...如果有引用类型,那么存在被篡改的风险,更应该使用深拷贝拷贝方法 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的深拷贝和浅拷贝

说到深拷贝与浅拷贝,为什么会有这两种概念呢,根本原因就在于js的两种数据类型:基本数据类型和引用数据类型,两种数据类型存储方式不同。...很显而易见的一点就是,JavaScript 中所有引用类型创建实例时,都是显式或隐式地 new 出对应类型的实例,实际上就是对应 C 语言的 malloc 分配内存函数。...JavaScript 中变量的拷贝 js 中的拷贝区分为「浅拷贝」与「深拷贝」。 浅拷贝拷贝只会将对象的各个属性进行依次复制,并不会进行递归复制,也就是说只会赋值目标对象的第一层属性。...未定义的属性将不会被复制,然而从对象的原型继承的属性将会被复制。 通过循环来实现深拷贝 function copy(arr){ var obj=arr.constructor==Array?...__proto__ = Object.create(null); for (let key in target) { // 相关操作 } 文章参考链接:js深浅拷贝知多少

1.4K20

JS进阶:继承

在理解继承之前,需要知道 js 的三个东西: 什么是 JS 原型链 this 的值到底是什么 JS 的new 到底是干什么的 一、什么是 JS 原型链 我们知道 JS 有对象,比如 var obj =...继承分类 image.png 继承方式 1、原型链继承 构造函数、原型和实例之间的关系:每个构造函数都有一个原型对象,原型对象都包含一个指向构造函数的指针,而实例都包含一个原型对象的指针。...继承的本质就是复制,即重写原型对象,代之以一个新类型的实例。...缺点: 只能继承父类的实例属性和方法,不能继承原型属性/方法 无法实现复用,每个子类都有父类实例函数的副本,影响性能 3、组合继承 组合上述两种方法就是组合继承。...用原型链实现对原型属性和方法的继承,用借用构造函数技术来实现实例属性的继承

4.4K10

js实现继承

js实现继承 经典继承(原型链) 缺点:过多的继承了没用的属性 Grandfather.prototype.lastName = 'zhang' function Grandfather() {...,造成了不必要的继承 共享原型 本质:重写原型对象 优点:只会继承父的原型,不会继承父原本自带的属性或方法(只有调用new Father()才会继承自身的东西) 缺点:给本身的原型添加属性或方法时,会把继承的那个原型也修改了...) 雏形 本质:重写原型对象 优点:只会继承父的原型,不会继承父原本自带的属性或方法(只有调用new Father()才会继承自身的东西) 缺点:1,这样继承后即使修改了son的原型也不会修改father...的原型,但会修改给father的实例;2,Son的原型指向了father实例,造成了Son的constructor缺失。...__proto__获取father的原型进行修改而Son.prototype.food,只是在改变father实例 改进 原理:使用一个F构造函数当中间层,F的原型继承父构造函数的原型,然后子的原型指向

5.3K20

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券