美文网首页
常见继承方式

常见继承方式

作者: 焦迈奇 | 来源:发表于2019-09-25 14:08 被阅读0次

原型链+借用构造函数的组合继承

function parent(val){
    this.val=val;
}
parent.prototype.getvalue=function(){
    console.log(this.val);
}
function Child(val){
    parent.call(this,val);
}
Child.prototype=new parent();
var child=new Child(1);
child.getvalue();
console.log(child instanceof parent);

在子类的构造函数中通过parent.call(this)继承父类的属性,然后改变子类的原型为new parent()来继承父类函数。
这种继承的方式,优点在于构造函数可以传参,不会与父类引用属性共享,可以复用父类的函数,缺点是继承父类函数的时候调用父构造函数,导致子类的原型上多了不需要的父类属性,存在内存浪费。

寄生组合继承(优化上一种组合继承)

function parent(val){
    this.val=val;
}
parent.prototype.getvalue=function(){
    console.log(this.val);
}
function Child(val){
    parent.call(this,val);
}
//Object.create()方法创建一个新对象,使用现有的对象来提供新创建的对象的__proto__。 
Child.prototype=Object.create(parent.prototype,{
    constructor:{
        value:Child,
        enumerable:false,
        writable:true,
        configurable:true
    }
});
var child=new Child(1);
child.getvalue();
console.log(child instanceof parent);

将父类的原型赋值给子类,即解决了无用的父类属性问题,正确找到子类的构造函数。

ES6中class继承

class可以通过extends关键字实现继承,还可以通过static关键字定义类的静态方法。class关键字只是原型的语法糖,js继承依旧是基于原型实现的。

class parent{
    constructor(val){
        this.val=val;
    }
    getvalue(){
        console.log(this.val);
    }
}
class Child extends parent{
    constructor(val){
        super(parent);
        this.val=val;
    }
}
var child=new Child(1);
child.getvalue();
console.log(child instanceof parent);
function inheritPrototype(subType, superType){
    var prototype = Object.create(superType.prototype);       //创建对象
    prototype.constructor = subType;                   //增强对象
    subType.prototype = prototype;                     //指定对象
}

class实现继承核心在于使用extends表明继承自哪个父类,并且在子类构造函数中必须调用super,因为类似parent.call(this,val)

相关文章

  • 常见继承方式

    原型链+借用构造函数的组合继承 在子类的构造函数中通过parent.call(this)继承父类的属性,然后改变子...

  • 继承

    常见的继承方式有 原型继承、组合继承、寄生组合继承、类的继承 ①原型继承:它的原理就是,利用原型链继承父级构造函数...

  • JavaScript常见的继承方式

    前言 JS作为面向对象的弱类型语言,继承也是其非常强大的特性之一。那么在JS中常见的继承方式有几种呢? 方式一、原...

  • js常见的继承方式

    1.原型链继承 基于原型链查找的特点,我们将父类的实例作为子类的原型,这种继承方式便是原型链继承。 Child.p...

  • js常见的继承方式

    js常见的继承方式 1. 原型链继承 2. 构造函数继承 3. 组合式继承 4. 原型式继承 5. 寄生式继承 6...

  • 总结JavaScript几种继承的方式及优缺点

    1. 原型继承 原型继承是比较常见一种继承方式 从上图中可以看到, 原型继承的特点: 注意:原型继承的缺点 如果...

  • JavaScript 继承

    继承是JS中非常内容,原因就是JS没有地道的继承方式,我们只能通过各种方式来模拟面向对象中的继承。下面介绍几种常见...

  • ES5和ES6 实现继承方式

    在ES5 中:通过原型链实现继承的,常见的继承方式是组合继承和寄生组合继承;在ES6中:通过Class来继承 组合...

  • 探究JS常见的6种继承方式

    继承可以使得子类别具有父类的各种方法和属性 继承方法: 一、原型链继承 原型链继承是比较常见的继承方式之一其中涉及...

  • springboot异常处理总结 2018-

    1,springBoot 处理异常有2种常见方式: (1) controller 层 都 继承(exten...

网友评论

      本文标题:常见继承方式

      本文链接:https://www.haomeiwen.com/subject/dgcwaqtx.html