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

JS入门难点解析12-继承的实现方式与优缺点

如果你能好好理解体会这两篇文章中的内容,那么对于本章所述的知识点,你将会感觉清晰易懂。 2. 关于继承 在详细讲述继承前,我们有必要理解继承的概念和JS为什么要实现继承。...我们知道,JavaScript是一种基于对象的脚本语言,而在ES6之前JS没有类的概念。如何将所有的对象区分与联系起来?如何更好地组织JS的代码呢?...下面我们详细介绍实现JS继承的两类四种方式和这几种方式的组合,以及他们各自的优缺点。 3. 模拟类的继承 正如第2节所述,JS的设计者为我们提供了一个最直接的思路。...的三角关系 JS实现继承的几种方式 重新理解JS的6种继承方式 Javascript继承机制的设计思想 经典面试题:js继承方式上 经典面试题:js继承方式下 闲说继承 Javascript...中的几种继承方式比较 JS实现继承的几种方式详述(推荐) 百度百科-面向对象程序设计 廖雪峰的官方网站-原型继承 百度百科-javascript 百度百科-继承性 BOOK-《JavaScript

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

    【说站】java继承的优缺点分析

    java继承的优缺点分析 1、优点 提高了代码的再利用性。 提高了代码的维护性。 让类与类有关,是多态的前提。 2、缺点 提高类的耦合性。这样一个类的变化会影响其他与此类相关的类别。...耦合:类与类的关系。 内聚:自己完成某件事的能力。 打破了封装性。 3、继承成员 继承机制引入了受保护的成员,提供了一个新的成员访问控制级别,可以理解为公共和私有。...在继承中,子类继承了超级结构函数以外的所有成员,这些成员成为子类继承成员。继承人不仅包括超级定义的共有、保护和私有成员,还包括超级继承人。...在子类中,子类可以访问自己定义的所有成员,也可以访问父亲的共有和受保护的继承成员,但不能访问超级的私有继承成员。 继承者在子类中的访问控制与其在超类中的访问控制相同。...资料类型为子类的对象无法访问子类及其父类的受保护成员。 以上就是java继承的优缺点分析,希望对大家有所帮助。

    52120

    JS 继承

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

    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 继承的是什么?如何实现继承?

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

    1.8K40

    JS实现继承的方式

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

    2.1K20

    js实现继承

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

    5.3K20

    Js继承的实现方式

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

    2K20

    JS进阶:继承

    在理解继承之前,需要知道 js 的三个东西: 什么是 JS 原型链 this 的值到底是什么 JS 的new 到底是干什么的 一、什么是 JS 原型链 我们知道 JS 有对象,比如 var obj =...如果你的函数调用不是 call 形式, 请将其转换为 call 形式 三、JS 的 new 到底是干什么的?...缺点: 只能继承父类的实例属性和方法,不能继承原型属性/方法 无法实现复用,每个子类都有父类实例函数的副本,影响性能 3、组合继承 组合上述两种方法就是组合继承。...用原型链实现对原型属性和方法的继承,用借用构造函数技术来实现实例属性的继承。...let p = new Rectangle(); // ReferenceError class Rectangle {} 2、ES5继承和ES6继承的区别 ES5的继承实质上是先创建子类的实例对象,

    4.4K10

    js实现继承的几种方式

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

    1.4K20

    js的继承与原型链

    对于使用基于类的语言,如 Java 的开发人员,js 令人困惑,因为它是动态的,并且本身不提供一个 class 实现。...谈到继承时,js 只有一种结构:对象。 每个实例对象( object )都有一个私有属性(称之为 __proto__ )指向它的构造函数的原型对象(prototype )。...该原型对象也有一个自己的原型对象( proto ) ,层层向上直到一个对象的原型对象为 null。根据定义,null 没有原型,并作为这个原型链中的最后一个环节。...几乎所有 js 中的对象都是位于原型链顶端的 Object 的实例。 尽管这种原型继承通常被认为是 JavaScript 的弱点之一,但是原型继承模型本身实际上比经典模型更强大。...例如,在原型模型的基础上构建经典模型相当简单。

    1.4K10

    JS原型继承和类式继承

    类式继承(构造函数) JS中其实是没有类的概念的,所谓的类也是模拟出来的。特别是当我们是用new 关键字的时候,就使得“类”的概念就越像其他语言中的类了。...另外就是类式继承不支持多重继承,而对于原型继承来说,你只需要写好extend对对象进行扩展即可。 组合模式 另外的一种模式,是结合类继承和原型继承的各自优点来进行对父类的继承。...用类式继承属性,而原型继承方法。这种模式避免了属性的公用,因为一般来说,每一个子类的属性都是私有的,而方法得到了统一。这种模式称为组合模式,也是继承类式常用到的一种方法。...从这里,我们也可以看到类继承和原型基础的一些区别。 结论 原型继承比较符合js这种语言的特点。因为它本身就是js强大的原型的一部分。...而类式继承,与其称它为继承方式,毋宁说是一种函数的运用技巧来模拟继承罢了。本文是卤煮的一己之见,错误偏颇在所难免,如果有之,请各位斧正。

    3.5K90

    JS继承机制总结

    JS继承机制总结 继承就是子类可以使用父类的所有功能,并且对这些功能进行扩展。 JS继承机制主要为原型链继承、构造函数继承、组合继承、寄生继承、寄生组合继承、原型式继承和混合式继承。...关于es6提出的class继承本文不做阐述,会另做一篇文章进行分析总结。 本文主要是做总结,各个继承方式的内容不做特别详细的说明。...,实现多继承,创建子类实例时,可以向父类传递参数 缺点 只能继承父类实例上的属性与方法,无法继承父类原型上的属性与方法。...缺点 一些引用数据操作的时候会出问题,两个实例会公用继承实例的引用数据类 谨慎定义方法,以免定义方法也继承对象原型的方法重名 无法直接给父级构造函数使用参数 寄生式继承 继承规则 //寄生式继承也没啥东西的...缺点 一些引用数据操作的时候会出问题,两个实例会公用继承实例的引用数据类 谨慎定义方法,以免定义方法也继承对象原型的方法重名 无法直接给父级构造函数使用参数 混合式继承 继承规则 //这个**混入方式继承

    1.6K10

    JS 继承的多种方法

    一、原型链 学过java的同学应该都知道,继承是java的重要特点之一,许多面向对象的语言都支持两种继承方式:接口继承和实现继承,接口继承只继承方法签名,而实现继承则继承实际的方法,在js中,由于函数没有签名...继承关系 最后,要提醒大家的是,所有引用类型默认都继承了Object,这个继承也是通过原型链实现的,因此,其实原型链的顶层就是Object的原型对象啦。...原型链继承 最常见的继承方法就是使用原型链实现继承啦,也就是我们上面所介绍的,接下来,还是看一个实际的例子。...,融合了它们的优点,现在已经成为js中最常用的继承方法。...寄生组合式继承 组合继承是js中最经常用到的一种继承方法,而我们前面也已经说了组合继承的缺点,组合继承需要调用两次超类型构造函数,一次是在创建子类型原型的时候,另一次是在子类型构造函数内部,子类型最终会包含超类型对象的全部实例属性

    2.8K10
    领券