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

JS 继承的多种方法

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

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

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实现继承的几种方法总结

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

1.2K40

JS进阶:继承

在理解继承之前,需要知道 js 的三个东西: 什么是 JS 原型链 this 的值到底是什么 JS 的new 到底是干什么的 一、什么是 JS 原型链 我们知道 JS 有对象,比如 var obj =...缺点: 只能继承父类的实例属性和方法,不能继承原型属性/方法 无法实现复用,每个子类都有父类实例函数的副本,影响性能 3、组合继承 组合上述两种方法就是组合继承。...用原型链实现对原型属性和方法继承,用借用构造函数技术来实现实例属性的继承。...所以,组合模式的缺点就是在使用子类创建实例对象时,其原型中会存在两份相同的属性/方法。 4、原型式继承 利用一个空对象作为中介,将某个对象直接赋值给空对象构造函数的原型。...ES6的继承有所不同,实质上是先创建父类的实例对象this,然后再用子类的构造函数修改this。因为子类没有自己的this对象,所以必须先调用父类的super()方法,否则新建实例报错。

4.4K10

js实现继承

js实现继承 经典继承(原型链) 缺点:过多的继承了没用的属性 Grandfather.prototype.lastName = 'zhang' function Grandfather() {...father function Son() { this.hobby = 'game' } var son = new Son() console.log(son); ​ son只想要继承...grandfather的lastName属性,但是由于原型链的关系,造成了son既会继承grandfather自神的东西,grandfather的原型的东西,father自身的东西和father原型上的东西...,造成了不必要的继承 共享原型 本质:重写原型对象 优点:只会继承父的原型,不会继承父原本自带的属性或方法(只有调用new Father()才会继承自身的东西) 缺点:给本身的原型添加属性或方法时,会把继承的那个原型也修改了...) 雏形 本质:重写原型对象 优点:只会继承父的原型,不会继承父原本自带的属性或方法(只有调用new Father()才会继承自身的东西) 缺点:1,这样继承后即使修改了son的原型也不会修改father

5.3K20

JS原型继承和类式继承

类式继承(构造函数) JS中其实是没有类的概念的,所谓的类也是模拟出来的。特别是当我们是用new 关键字的时候,就使得“类”的概念就越像其他语言中的类了。...我们说的原型继承,就是将父对像的方法给子类的原型。子类的构造函数中不拥有这些方法和属性。...其次类式继承是不可变的。在运行时,无法修改或者添加新的方法,这种方式是一种固步自封的死方法。而原型继承是可以通过改变原型链接而对子类进行修改的。...用类式继承属性,而原型继承方法。这种模式避免了属性的公用,因为一般来说,每一个子类的属性都是私有的,而方法得到了统一。这种模式称为组合模式,也是继承类式常用到的一种方法。...从这里,我们也可以看到类继承和原型基础的一些区别。 结论 原型继承比较符合js这种语言的特点。因为它本身就是js强大的原型的一部分。

3.4K90

JS继承机制总结

JS继承机制总结 继承就是子类可以使用父类的所有功能,并且对这些功能进行扩展。 JS继承机制主要为原型链继承、构造函数继承、组合继承、寄生继承、寄生组合继承、原型式继承和混合式继承。...,在原型链继承后可以覆盖父类的属性与方法。...,实现多继承,创建子类实例时,可以向父类传递参数 缺点 只能继承父类实例上的属性与方法,无法继承父类原型上的属性与方法。...缺点 一些引用数据操作的时候会出问题,两个实例会公用继承实例的引用数据类 谨慎定义方法,以免定义方法继承对象原型的方法重名 无法直接给父级构造函数使用参数 寄生式继承 继承规则 //寄生式继承也没啥东西的...缺点 一些引用数据操作的时候会出问题,两个实例会公用继承实例的引用数据类 谨慎定义方法,以免定义方法继承对象原型的方法重名 无法直接给父级构造函数使用参数 混合式继承 继承规则 //这个**混入方式继承

1.5K10

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

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

1.8K40

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

JS 继承的7种方法,你学会了吗?...优点与不足 优点: 解决了无法共享引用值的问题 能够传递参数 缺点: 只能继承父类的实例属性和方法,不能继承父类的原型属性和方法 父类方法无法复用。每次实例化子类,都要执行父类函数。...基本思想 通过原型链继承方式继承父类原型上的属性和方法,再使用盗用构造函数的方式继承实例上的属性 这样,实现了把方法定义在原型上以实现复用,又保证了让每个实例都有自己的属性 2....实现方法 在组合继承方法中我们 call 了一次,又 new 了一次,导致调用了2次父类,而在寄生式继承中,我们可以调用 API 来实现继承父类的原型 我们将两者结合在一起 不再采用 new 关键字来给改变原型...的东西还有很多,这里就不多说了 参考文献 《JavaScript 高级程序设计》 《JavaScript常见八种继承方案》 ---- 以上就是关于 JS 实现继承的 7 种方法了,当然还会有一些其他的继承方法

65430

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

JS 继承的7种方法,你学会了吗?...优点与不足 优点: 解决了无法共享引用值的问题 能够传递参数 缺点: 只能继承父类的实例属性和方法,不能继承父类的原型属性和方法 父类方法无法复用。每次实例化子类,都要执行父类函数。...基本思想 通过原型链继承方式继承父类原型上的属性和方法,再使用盗用构造函数的方式继承实例上的属性 这样,实现了把方法定义在原型上以实现复用,又保证了让每个实例都有自己的属性 2....实现方法 在组合继承方法中我们 call 了一次,又 new 了一次,导致调用了2次父类,而在寄生式继承中,我们可以调用 API 来实现继承父类的原型 我们将两者结合在一起 不再采用 new 关键字来给改变原型...的东西还有很多,这里就不多说了 参考文献 《JavaScript 高级程序设计》 《JavaScript常见八种继承方案》 ---- 以上就是关于 JS 实现继承的 7 种方法了,当然还会有一些其他的继承方法

34540

js各种继承方式汇总

js中的各种继承实现汇总 首先定义一个父类: function Animal(name) { this.name = name || '动物' this.sleep = function ()...,可以向父类传递参数 缺点: 1、没用到原型,只是单纯继承了父类的实例属性及方法 2、没继承原型上的属性及方法 3、每个子类都有父类方法属性的副本,影响性能,没有实现父类函数复用 function...) // false,等于是复制父类的实例属性给子类,没用到原型 实例继承 特点: 1、子类的构造中返回父类的实例 优点: 1、可以继承原型上的属性或方法 缺点: 1、实例为父类实例,而非子类实例...(暴力继承) 特点: 1、子类的构造中强制拷贝父类原型上的属性或方法 优点: 1、可以多重继承 缺点: 1、效率较低,内存占用高 2、不能继承父类不可枚举的属性(不能用for in遍历的)...Animal) // false 组合继承(构造继承+原型链继承) 特点: 1、组合构造继承和原型链继承 优点: 1、可以继承实例属性/方法,也可以继承原型属性/方法 2、既是子类的实例,

2.2K70
领券