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

js实现继承几种方式

js作为一个面向对象弱类型语言,继承也是其非常强大特性之一。一般情况下会出现下面的6中继承方式。...无法实现多继承 来自原型对象引用属性是所有实例共享 创建子类实例时,无法向父类构造函数传参 2、构造继承 核心:使用父类构造函数来增强子类实例,等于是复制父类实例属性给子类(没用到原型) function...) 缺点: 实例并不是父类实例,只是子类实例 只能继承父类实例属性和方法,不能继承原型属性/方法 无法实现函数复用,每个子类都有父类实例函数副本,影响性能 3、实例继承 核心:为父类实例添加新特性...缺点: 效率较低,内存占用高(因为要拷贝父类属性) 无法获取父类不可枚举方法(不可枚举方法,不能使用for in 访问到) 5、组合继承(推荐) 核心:通过调用父类构造,继承父类属性并保留传参优点...) 6、寄生组合继承(推荐) 核心:通过寄生方式,砍掉父类实例属性,这样,在调用两次父类构造时候,就不会初始化两次实例方法/属性,避免组合继承缺点 function Cat(name){

1.4K20

JS实现继承几种方法总结

文章目录 一、基本代码 二、实现继承方法: 1.原型链继承 2.构造继承: 3.实例继承 4.拷贝继承: 5.组合继承: 6.寄生组合继承: 7.class – extends – – ES6 一...(call多个父类对象) 缺点: 实例并不是父类实例,只是子类实例 只能继承父类实例属性和方法,不能继承原型属性/方法 无法实现函数复用,每个子类都有父类实例函数副本,影响性能 ---- 3.实例继承...效率极低,内存占用高(因为要拷贝父类属性) 无法获取父类不可枚举方法(for in不能访问到) ---- 5.组合继承: //核心:通过调用父类构造,继承父类属性并保留传参优点,然后通过将父类实例作为子类原型...,可以继承实例属性/方法,也可以继承原型属性/方法 既是子类实例,也是父类实例 不存在引用属性共享问题 函数可复用 可传参 缺点: 调用了俩次构造函数,生成了俩份实例(子类实例将子类原型上那份屏蔽了...) ---- 6.寄生组合继承: //核心:通过寄生方式,砍掉父类实例属性,这样,在调用俩次父类构造时候,就不会初始化俩次实例方法/属性,避免了组合继承缺点。

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

架构师JavaScript 对象继承方式,几种程序写法?

架构师JavaScript 对象继承方式,几种程序写法? 一、对象冒充 其原理如下:构造函数使用 this 关键字给所有属性和方法赋值(即采用类声明构造函数方式)。...二、原型链继承 众所周知,JavaScript 是一门基于原型语言,在 JavaScript 中 prototype 对象任何属性和方法都被传递给那个类所有实例。...原型链利用这种功能来实现继承机制: 注意:调用 Parent 构造函数,没有给它传递参数。这在原型链中是标准做法。要确保构造函数没有任何参数。...三、使用 call 或 applay 方法 这个方法是与对象冒充方法最相似的方法,因为它也是通过改变了 this 指向而实现继承: apply 方法本人就不举列了,它和 call 方法区别在于它第二个参数必须是数组...六、extends 关键字实现继承 这个是 ES6 语法糖,下面看下es6实现继承方法: 上面代码中,子类constructor方法没有调用super之前,就使用this关键字,结果报错,而放在super

42920

JS 原生方法原理探究(四):如何实现继承几种方式?

这是JS 原生方法原理探究系列第四篇文章。本文会介绍如何实现 JS 中常见几种继承方式,同时简要它们优缺点。 实现继承方法 ?...原型链继承和借用构造函数继承分别解决了继承父类方法和继承父类属性问题,这两个方法结合就得到了组合继承; 原型式继承核心是实现对象浅拷贝并进行增强,寄生式继承则将这个过程封装成一个返回对象函数;...Class extends 继承是 ES6 ,本质上是寄生组合式继承一种运用 下面的示例中,SuperType 表示父类,SubType 表示继承父类子类。...此外,对于父类原型上方法,子类是无法继承,因为这种继承方式并没有使用到原型。 3)组合继承 看起来,原型链继承擅长方法继承,而借用构造函数继承擅长属性继承,那么能不能取二者之长呢?...寄生组合式继承出现是为了解决组合继承存在一些问题,这种继承基本上是完美的了。

1.4K20

js数据类型几种_前端数据类型几种

大家好,又见面了,我是你们朋友全栈君。 js数据类型 现如今基本数据类型(原始类型)几种? 5?6?7?...;如下图所示: 具体js数据类型解释如下: #### 原始数据类型: - 布尔类型:布尔表示一个逻辑实体,可以两个值:true 和 false。...在字符串中每个元素占据了字符串位置。第一个元素索引为0,下一个是索引1,依此类推。字符串长度是它元素数量。...- Symbols符号类型:符号(Symbols)是ECMAScript 第6版新定义。符号类型是唯一并且是不可修改, 并且也可以用来作为Objectkey值(如下)....如发现本站涉嫌侵权/违法违规内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

1.9K10

JS 继承

继承相关问题,比如: ES6 class 继承用 ES5 如何实现。...推荐阅读JS继承相关书籍章节 《JavaScript高级程序设计第3版》第6章——面向对象程序设计 6种继承方案,分别是原型链继承、借用构造函数继承、组合继承、原型式继承、寄生式继承、寄生组合式继承...图灵社区本书地址,后文放出 github链接,里面包含这几种继承代码 demo。...上卷第6章——行为委托和附录A(ES6中class) 总结 继承对于JS来说就是父类拥有的方法和属性、静态方法等,子类也要拥有。...继承方法可以很多,重点在于必须理解并熟。 悉这些对象、原型以及构造器工作方式,剩下就简单了。寄生组合式继承是开发者使用比较多

2.8K32

js继承

类式继承 1.最常用继承组合模式 —— 借用构造函数 & 设置原型 // 父类 function Parent(name) { this.name = name;...继承了父类自身属性 继承了父类原型属性(方法) 基于上面的问题,如果 Child.prototype 不指向 Parent实例 new Parent(),而是指向 Parent.prototype...但是,如果直接共享原型 Child.prototype = Parent.prototype; 这样很明显是问题,因为对Child原型修改,会影响到所有对象和祖先对象! 3....原型继承并不涉及到类,这里对象都是继承自其他对象。...—— 浅复制 & 深复制 继承目的是为了实现代码复用,所以一个对象要从另一个对象中获取功能,把目标对象属性和方法复制过来也是一种方法。

2.5K10

js 继承是什么?如何实现继承

继承含义: 继承是面向对象编程中一个重要概念,通过继承可以使子类实例使用在父类中定义属性和方法。...二、 构造函数继承 针对前面原型链继承可能会存在公用一个原型链问题,那么我们可以给大家介绍一种方式:构造函数继承。构造函数继承相当于将父类复制给子类。...三、 组合继承 原型链继承继承父类原型链上属性,但是可能会存在篡改问题;而构造函数继承不会存在篡改问题,但是不能继承原型上面的属性。那么我们是否可以将两者进行结合呢?...六、 寄生组合式继承 前面说了这么多,每种继承方式都有自己优点和缺点,那么是不是可以将这些继承方式做一个合并:以他之长补己之短呢?...其实我们知道,class语法也是由es5语法来写,其继承方法和寄生组合式继承方法一样。关于es6类,我在代码自检时候遇到两个重点,值得注意下是: 函数声明会提升,类声明不会。

1.8K40

JS实现继承方式

JS实现继承方式 构造函数继承 原型继承 组合(构造函数+原型)继承 Class继承 ---- 构造函数继承 构造函数继承关键:在Child构造函数中执行Parent.call(this)...组合继承 组合继承关键: 1.属性使用构造函数继承 - 避免了原型继承中Parent引用属性被所有Child实例共享缺陷。...(this)),降低效率,且如果Parent构造函数副作用,重复调用可能造成不良后果。...2.子类constructor class Chinese extend Person{ constructor(skin, language, position){ super(skin...因为子类没有自己this对象,而是继承父类this对象。如果不调用super函数,子类就得不到this对象。super()作为父类构造函数,只能出现在子类constructor()中。

2K20

js实现继承

js实现继承 经典继承(原型链) 缺点:过多继承了没用属性 Grandfather.prototype.lastName = 'zhang' function Grandfather() {...grandfatherlastName属性,但是由于原型链关系,造成了son既会继承grandfather自神东西,grandfather原型东西,father自身东西和father原型上东西...,造成了不必要继承 共享原型 本质:重写原型对象 优点:只会继承原型,不会继承父原本自带属性或方法(只有调用new Father()才会继承自身东西) 缺点:给本身原型添加属性或方法时,会把继承那个原型也修改了...) 原理:在函数里面调用函数,约等于将父里面的代码复制粘贴到子里面,然后通过call将父this改成子this 缺点: 不能继承借用构造函数原型 每次调用子构造函数都要调用多一次借用父构造函数...) 雏形 本质:重写原型对象 优点:只会继承原型,不会继承父原本自带属性或方法(只有调用new Father()才会继承自身东西) 缺点:1,这样继承后即使修改了son原型也不会修改father

5.3K20

Js继承实现方式

Js继承实现方式 继承是面向对象软件技术当中一个概念,与多态、封装共为面向对象三个基本特征。继承可以使得子类具有父类属性和方法或者重新定义、追加属性和方法等。...// 判断child构造函数Childprototype对象是否在Parent原型链上 特点 父类新增原型方法与属性,子类都能访问到 非常纯粹继承关系,实例是子类实例,也是父类实例 子类实例可以继承父类构造函数属性和方法...不足 实例并不是父类实例,只是子类实例 只继承了父类构造函数属性和方法,没有继承父类原型属性和方法 每个子类都有父类实例函数副本,拷贝了父类函数而不是引用,影响性能 实例继承 为父类实例增加成员与方法...new Child()或直接调用Child() 不足 不支持多继承 实例是父类实例,不是子类实例 同样也是将父类成员与方法做了实例化拷贝 拷贝继承 通过直接将父类属性拷贝到子类原型中实现继承...父类新增原型方法与属性,子类都能访问到 不足 不能继承父构造函数实例对象成员 所有子类实例都会共享父类原型对象中属性 组合继承 组合原型链继承和借用构造函数继承,结合了两种模式优点,传参和复用

2K20
领券