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

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继承实现方式 继承是面向对象软件技术当中一个概念,与多态、封装共为面向对象三个基本特征。继承可以使得子类具有父类属性和方法或者重新定义、追加属性和方法等。...不足 实例并不是父类实例,只是子类实例 只继承了父类构造函数属性和方法,没有继承父类原型属性和方法 每个子类都有父类实例函数副本,拷贝了父类函数而不是引用,影响性能 实例继承 为父类实例增加成员与方法...Child("child"); // 实例化子类 child.say(); // child console.log(child.from); // child 特点 实例化子类时可以向父类构造函数传参 子类实例化方式可以为...父类新增原型方法与属性,子类都能访问到 不足 不能继承父构造函数实例对象成员 所有子类实例都会共享父类原型对象中属性 组合继承 组合原型链继承和借用构造函数继承,结合了两种模式优点,传参和复用...寄生组合继承 通过寄生方式,砍掉父类实例属性,在调用两次父类构造时候,就不会初始化两次实例方法和属性,避免组合继承缺点 // 定义父类 function Parent(from){

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

    js实现继承几种方式

    js作为一个面向对象弱类型语言,继承也是其非常强大特性之一。一般情况下会出现下面的6中继承方式。...无法实现多继承 来自原型对象引用属性是所有实例共享 创建子类实例时,无法向父类构造函数传参 2、构造继承 核心:使用父类构造函数来增强子类实例,等于是复制父类实例属性给子类(没用到原型) function...console.log(cat.eat("猫粮"));//此处会报错,通过构造继承方式无法继承原型属性和方法 console.log(cat instanceof Animal); // false...) 缺点: 实例并不是父类实例,只是子类实例 只能继承父类实例属性和方法,不能继承原型属性/方法 无法实现函数复用,每个子类都有父类实例函数副本,影响性能 3、实例继承 核心:为父类实例添加新特性...) 6、寄生组合继承(推荐) 核心:通过寄生方式,砍掉父类实例属性,这样,在调用两次父类构造时候,就不会初始化两次实例方法/属性,避免组合继承缺点 function Cat(name){

    1.4K20

    js各种继承方式汇总

    js各种继承实现汇总 首先定义一个父类: function Animal(name) { this.name = name || '动物' this.sleep = function ()...方式) 特点: 1、子类构造中进行父类构造调用 优点: 1、实现了多继承,想继承哪个直接在子类构造里面call或者apply哪个就行 2、避免所有子类实例共享父类引用属性问题 3、创建子类实例时...,可以向父类传递参数 缺点: 1、没用到原型,只是单纯继承了父类实例属性及方法 2、没继承原型上属性及方法 3、每个子类都有父类方法属性副本,影响性能,没有实现父类函数复用 function...) // false,等于是复制父类实例属性给子类,没用到原型 实例继承 特点: 1、子类构造中返回父类实例 优点: 1、可以继承原型上属性或方法 缺点: 1、实例为父类实例,而非子类实例...(暴力继承) 特点: 1、子类构造中强制拷贝父类原型上属性或方法 优点: 1、可以多重继承 缺点: 1、效率较低,内存占用高 2、不能继承父类不可枚举属性(不能用for in遍历

    2.2K70

    JS 继承

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

    2.9K32

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

    这是JS 原生方法原理探究系列第四篇文章。本文会介绍如何实现 JS 中常见几种继承方式,同时简要它们优缺点。 实现继承方法 ?...此外,对于父类原型上方法,子类是无法继承,因为这种继承方式并没有使用到原型。 3)组合继承 看起来,原型链继承擅长方法继承,而借用构造函数继承擅长属性继承,那么能不能取二者之长呢?...,使用构造函数继承方式继承属性。...4) 原型式继承 原型式继承所做事情类似于浅拷贝一个对象,再通过自定义方式增强新对象。它能够方便地实现在不同对象之间共享信息,同时又不需要额外创建构造函数(内部做了处理)。...inherit(SuperType,SubType) const obj = new SubType() 注意几个要点: 属性继承仍然是采用借用构造函数继承方式,关键是方法继承

    1.4K20

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

    继承含义: 继承是面向对象编程中一个重要概念,通过继承可以使子类实例使用在父类中定义属性和方法。...二、 构造函数继承 针对前面原型链继承可能会存在公用一个原型链问题,那么我们可以给大家介绍一种方式:构造函数继承。构造函数继承相当于将父类复制给子类。...三、 组合继承 原型链继承继承父类原型链上属性,但是可能会存在篡改问题;而构造函数继承不会存在篡改问题,但是不能继承原型上面的属性。那么我们是否可以将两者进行结合呢?...} let Programmer = { features:["tutou","jiaban","single"] } // 方式一:最原始做法 var programmer1 = object...六、 寄生组合式继承 前面说了这么多,每种继承方式都有自己优点和缺点,那么是不是可以将这些继承方式做一个合并:以他之长补己之短呢?

    1.8K40

    JavaScript几种继承方式

    JavaScript几种继承方式 原型链继承 借助构造函数继承(经典继承) 组合继承:原型链 + 借用构造函数(最常用) 原型式继承 (Object.create) 寄生式继承 寄生组合式继承(最理想...寄生式继承 创建一个用于封装继承过程函数,该函数在内部以某种方式来增强对象 function createObj (original) { // 通过调用函数创新一个新对象 var clone...参考 JavaScript常见六种继承方式[1] JS继承几种方式[2] JavaScript深入之继承多种方式和优缺点[3] ECMAScript6入门之 Class继承[4] 参考资料 [1...] JavaScript常见六种继承方式: https://segmentfault.com/a/1190000016708006 [2] JS继承几种方式: https://juejin.im/post.../5b654e88f265da0f4a4e914c [3] JavaScript深入之继承多种方式和优缺点: https://github.com/mqyqingfeng/Blog/issues/16

    51031

    JS进阶:继承

    在理解继承之前,需要知道 js 三个东西: 什么是 JS 原型链 this 值到底是什么 JS new 到底是干什么 一、什么是 JS 原型链 我们知道 JS 有对象,比如 var obj =...如果你函数调用不是 call 形式, 请将其转换为 call 形式 三、JS new 到底是干什么?...防御:function(){ /*护脸*/ } } 四、继承 继承分类 image.png 继承方式 1、原型链继承 构造函数、原型和实例之间关系:每个构造函数都有一个原型对象,原型对象都包含一个指向构造函数指针...7、混入方式继承多个对象 function MyClass() { SuperClass.call(this); OtherSuperClass.call(this); } // 继承一个类...,其实现和上述寄生组合式继承方式一样 function _inherits(subType, superType) { // 创建对象,创建父类原型一个副本 // 增强对象,弥补因重写原型而失去默认

    4.4K10

    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
    领券