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

JS 继承多种方法

一、原型链 学过java同学应该都知道,继承是java重要特点之一,许多面向对象语言都支持两种继承方式:接口继承和实现继承,接口继承继承方法签名,而实现继承继承实际方法,在js中,由于函数没有签名...原型链继承 最常见继承方法就是使用原型链实现继承啦,也就是我们上面所介绍,接下来,还是看一个实际例子。...,融合了它们优点,现在已经成为js中最常用继承方法。...寄生式继承 寄生式继承其实和我们前面说创建对象方法寄生构造函数和工程模式很像,创建一个仅用于封装继承过程函数,该函数在内部以某种方法来增强对象,最后再返回该对象。...寄生组合式继承 组合继承js中最经常用到一种继承方法,而我们前面也已经说了组合继承缺点,组合继承需要调用两次超类型构造函数,一次是在创建子类型原型时候,另一次是在子类型构造函数内部,子类型最终会包含超类型对象全部实例属性

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

JS实现继承几种方法总结

文章目录 一、基本代码 二、实现继承方法: 1.原型链继承 2.构造继承: 3.实例继承 4.拷贝继承: 5.组合继承: 6.寄生组合继承: 7.class – extends – – ES6 一...,也是父类实例 父类新增原型方法/原型属性,子类都能访问到 简单 缺点 要想为子类新增属性和方法,必须要在new Animal()这样语句之后执行,不能放到构造器中 无法实现继承多个 来自原型对象所有属性被所有实例共享...(call多个父类对象) 缺点: 实例并不是父类实例,只是子类实例 只能继承父类实例属性和方法,不能继承原型属性/方法 无法实现函数复用,每个子类都有父类实例函数副本,影响性能 ---- 3.实例继承...,可以继承实例属性/方法,也可以继承原型属性/方法 既是子类实例,也是父类实例 不存在引用属性共享问题 函数可复用 可传参 缺点: 调用了俩次构造函数,生成了俩份实例(子类实例将子类原型上那份屏蔽了...) ---- 6.寄生组合继承: //核心:通过寄生方式,砍掉父类实例属性,这样,在调用俩次父类构造时候,就不会初始化俩次实例方法/属性,避免了组合继承缺点。

1.2K40

JS面试题-JS实现继承方法(共6种)

,但是问题是父类原型属性无法继承 方法二: 借助原型链 function Parent (sex) { this.name = 'zxx' this.sex = sex } Parent.prototype.test...方法五(推荐使用): 组合继承优化1(寄生组合式继承) 这种方式高效率体现它只调用了一次 Parent 构造函数,并且因此避免了在 Child.prototype 上面创建不必要、多余属性。...核心是_inherits函数,可以看到它采用依然也是第五种方式————寄生组合继承方式,同时证明了这种方式成功。...不过这里加了一个Object.setPrototypeOf(subClass, superClass),是用来继承父类静态方法。这也是原来继承方式疏忽掉地方。...__proto__ = superClass; } 继承最大问题在于:无法决定继承哪些属性,所有属性都得继承

67940

JS 继承

构造函数 ES6 extends 继承做了什么操作 我们先看看这段包含静态方法 ES6 继承代码: // ES6 class Parent{ constructor(name){...推荐阅读JS继承相关书籍章节 《JavaScript高级程序设计第3版》第6章——面向对象程序设计 6种继承方案,分别是原型链继承、借用构造函数继承、组合继承、原型式继承、寄生式继承、寄生组合式继承...上卷第6章——行为委托和附录A(ES6中class) 总结 继承对于JS来说就是父类拥有的方法和属性、静态方法等,子类也要拥有。...继承方法可以有很多,重点在于必须理解并熟。 悉这些对象、原型以及构造器工作方式,剩下就简单了。寄生组合式继承是开发者使用比较多。...回顾寄生组合式继承,主要就是三点: 子类构造函数 proto指向父类构造器,继承父类静态方法 子类构造函数 prototype proto指向父类构造器 prototype,继承父类方法

2.9K32

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

继承含义: 继承是面向对象编程中一个重要概念,通过继承可以使子类实例使用在父类中定义属性和方法。...JavaScript继承是一种允许我们在已有类基础上创建新类机制;它为子类提供了灵活性,可以重用父类方法和变量。...: 不能继承原型上面的属性和方法 复制处理,相当于在子类中实现了所有父类方法,影响子类性能。...这个例子效率体现在它只调用了一次父类构造函数,这很大程度上面减少创建了不必要多余属性。并且还能继承原型链上面的方法。这个方法是现在库实现方法。...其实我们知道,class语法也是由es5语法来写,其继承方法和寄生组合式继承方法一样。关于es6类,我在代码自检时候遇到两个重点,值得注意下是: 函数声明会提升,类声明不会。

1.8K40

JS进阶:继承

在理解继承之前,需要知道 js 三个东西: 什么是 JS 原型链 this 值到底是什么 JS new 到底是干什么 一、什么是 JS 原型链 我们知道 JS 有对象,比如 var obj =...缺点: 只能继承父类实例属性和方法,不能继承原型属性/方法 无法实现复用,每个子类都有父类实例函数副本,影响性能 3、组合继承 组合上述两种方法就是组合继承。...用原型链实现对原型属性和方法继承,用借用构造函数技术来实现实例属性继承。...无法传递参数 另外,ES5中存在Object.create()方法,能够代替上面的object方法。...ES6继承有所不同,实质上是先创建父类实例对象this,然后再用子类构造函数修改this。因为子类没有自己this对象,所以必须先调用父类super()方法,否则新建实例报错。

4.4K10

JS实现继承方式

JS实现继承方式 构造函数继承 原型继承 组合(构造函数+原型)继承 Class继承 ---- 构造函数继承 构造函数继承关键:在Child构造函数中执行Parent.call(this)...this.speak = function(){ console.log("Parent speak") } } // 缺点:new多个Child时, // Parent构造函数中方法会在每个...组合继承 组合继承关键: 1.属性使用构造函数继承 - 避免了原型继承中Parent引用属性被所有Child实例共享缺陷。...2.方法使用过原型继承 - 避免了构造函数继承方法重复拷贝、浪费内存缺陷 function Parent(){ this.name = name; this.hobby = [];...因为子类没有自己this对象,而是继承父类this对象。如果不调用super函数,子类就得不到this对象。super()作为父类构造函数,只能出现在子类constructor()中。

2K20

JS 继承7种方法,你学会了吗?

JS 继承7种方法,你学会了吗?...优点与不足 优点: 解决了无法共享引用值问题 能够传递参数 缺点: 只能继承父类实例属性和方法,不能继承父类原型属性和方法 父类方法无法复用。每次实例化子类,都要执行父类函数。...重新声明父类所定义方法,无法复用。 三、组合继承 在前面两种方法中,都存在着一定缺陷,所以很少会将它们单独使用。...基本思想 通过原型链继承方式继承父类原型上属性和方法,再使用盗用构造函数方式继承实例上属性 这样,实现了把方法定义在原型上以实现复用,又保证了让每个实例都有自己属性 2....东西还有很多,这里就不多说了 参考文献 《JavaScript 高级程序设计》 《JavaScript常见八种继承方案》 ---- 以上就是关于 JS 实现继承 7 种方法了,当然还会有一些其他继承方法

65430

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原型链上 特点 父类新增原型方法与属性,子类都能访问到 非常纯粹继承关系,实例是子类实例,也是父类实例 子类实例可以继承父类构造函数属性和方法...实例化子类时可以向父类构造函数传参 通过调用多个父类构造函数可以实现多继承 不足 实例并不是父类实例,只是子类实例 只继承了父类构造函数属性和方法,没有继承父类原型属性和方法 每个子类都有父类实例函数副本...父类新增原型方法与属性,子类都能访问到 不足 不能继承父构造函数实例对象成员 所有子类实例都会共享父类原型对象中属性 组合继承 组合原型链继承和借用构造函数继承,结合了两种模式优点,传参和复用...既是子类实例,也是父类实例 实例化子类时可以向父类构造函数传参 可以继承实例属性和方法,也可以继承原型属性和方法 不足 调用了两次父类构造函数,生成了两份实例,子类构造函数拷贝会代替原型上父类构造函数实例

2K20

JS 继承7种方法,你学会了吗?

JS 继承7种方法,你学会了吗?...优点与不足 优点: 解决了无法共享引用值问题 能够传递参数 缺点: 只能继承父类实例属性和方法,不能继承父类原型属性和方法 父类方法无法复用。每次实例化子类,都要执行父类函数。...重新声明父类所定义方法,无法复用。 三、组合继承 在前面两种方法中,都存在着一定缺陷,所以很少会将它们单独使用。...基本思想 通过原型链继承方式继承父类原型上属性和方法,再使用盗用构造函数方式继承实例上属性 这样,实现了把方法定义在原型上以实现复用,又保证了让每个实例都有自己属性 2....东西还有很多,这里就不多说了 参考文献 《JavaScript 高级程序设计》 《JavaScript常见八种继承方案》 ---- 以上就是关于 JS 实现继承 7 种方法了,当然还会有一些其他继承方法

34540

JS原型继承和类式继承

类式继承(构造函数) JS中其实是没有类概念,所谓类也是模拟出来。特别是当我们是用new 关键字时候,就使得“类”概念就越像其他语言中类了。...类式继承是在函数对象内调用父类构造函数,使得自身获得父类方法和属性。call和apply方法为类式继承提供了支持。通过改变this作用环境,使得子类本身具有父类各种属性。...原型最后指向是null。我们说原型继承,就是将父对像方法给子类原型。子类构造函数中不拥有这些方法和属性。...用类式继承属性,而原型继承方法。这种模式避免了属性公用,因为一般来说,每一个子类属性都是私有的,而方法得到了统一。这种模式称为组合模式,也是继承类式常用到一种方法。...从这里,我们也可以看到类继承和原型基础一些区别。 结论 原型继承比较符合js这种语言特点。因为它本身就是js强大原型一部分。

3.4K90

继承方法

1 问题 定义一个父类,用子类去继承父类所拥有的方法、定义属性,然后使用测试文件实现子类输出父类方法信息,属性等。...2 方法 2.1 定义一个名为Person父类: 2.2 定义一个名为Student子类,并令其继承父类: 2.3 定义父类属性、方法: 2.4定义子类属性,以及输出父类属性: 2.5...Student lisi = new Student("李四",18,"165465465",54654,"四川旅游学院"); lisi.fanhui(); }} 3 结语 针对于继承类以及类中方法和属性...,首先应该创建父类和子类继承,然后是定义类属性和方法,最后输出返回它内容。...单单从目前来继承类属于比较基础方法,之后还会在此基础上实现更多延伸,例如分块利用,比所有代码写在一起更加方便,整洁。

14810

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

这是JS 原生方法原理探究系列第四篇文章。本文会介绍如何实现 JS 中常见几种继承方式,同时简要它们优缺点。 实现继承方法 ?...实现继承方法共有 7 种,这 7 种方法并不是互相独立,它们之间更像是一种互补或者增强关系。...原型链继承和借用构造函数继承分别解决了继承父类方法继承父类属性问题,这两个方法结合就得到了组合继承; 原型式继承核心是实现对象浅拷贝并进行增强,寄生式继承则将这个过程封装成一个返回对象函数;...属性是没问题了,方法继承又有了问题。...此外,对于父类原型上方法,子类是无法继承,因为这种继承方式并没有使用到原型。 3)组合继承 看起来,原型链继承擅长方法继承,而借用构造函数继承擅长属性继承,那么能不能取二者之长呢?

1.4K20

js实现继承几种方式

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

1.4K20
领券