美文网首页
组合寄生继承和组合继承

组合寄生继承和组合继承

作者: 吃茶叶蛋 | 来源:发表于2020-06-11 10:30 被阅读0次

1.js中实现组合继承(B继承A):

function A(name){

    this.name = name;

    this.colors = ["red", "green", "blue"];

}

A.prototype.say =function()

{

    console.log(this.name);

}

function B(name, age){

    A.call(this, name);    //第二次调用

    this.age = age;

}

B.prototype =new A();    //第一次调用

B.prototype.constructor = B;

function main(){

var b = new B("hello", 30);

b.say();

}

这种继承方式主要是利用原型链实现继承,同时使用构造函数传入参数,每当生成B对象时,会调用A的构造函数添加name和ary属性从而实现继承。

但这种方式有个缺陷,会调用2次A的构造函数,第一次是在设置prototype时,此时B.prototype指向一个A的实例,实例中保存着一份name和ary;第二次是在生成B对象时,B的构造函数会调用A的构造函数,在B对象中添加name和ary属性,当访问B对象属性时,发现B对象中有name和ary,所以返回的值是我们所期望的。

2.寄生组合式继承(B继承A):

function create(B, A){

    var prototype = object(A.prototype);

    B.prototype = prototype;

    prototype.constructor = B;

}

function object(o){

    function F(){};

    F.prototype = o;

    return new F();

}

function A(name){

    this.name = name;

    this.colors = ["red", "green", "blue"];

}

A.prototype.sayName =function()

{

    console.log(this.name);

}

function B(name, age){

    A.call(this, name);

    this.age = age;

}

create(B, A);

B.prototype.sayAge =function()

{

    console.log(this.age);

}

function main(){

    var instance =new B("hello", 30);

    instance.sayName();  

    instance.sayAge();  

}

这种继承方式跟第一种很相似,区别就是使用了create方法,首先创建A原型的一个副本,然后将因重写原型而失去的constructor指向B,最后将新创建的原型副本赋值给B的原型。

优点是不会调用两次父超类型的构造函数,不用创建多余属性。

参考了网上的文章,不会百度的前端不是好前端。

相关文章

  • 二、js继承的几种方式及优缺点

    1、继承:原型链、借用构造函数、组合继承、原型式继承、寄生式继承、寄生组合继承

  • js继承方式

    类式继承 构造函数继承 组合继承 类式继承 + 构造函数继承 原型式继承 寄生式继承 寄生组合式继承 寄生式继承 ...

  • 继承

    原型继承 借用构造函数 组合继承 原型式继承 寄生式继承 寄生组合继承 优点: 因为组合继承最大的问题是无论什么...

  • 组合寄生继承和组合继承

    1.js中实现组合继承(B继承A): function A(name){ this.name = name; ...

  • js一些技巧.md

    js中的constructor和prototype 组合继承与寄生继承 组合继承 可以继承实例属性和方法,也可以继...

  • javaScript 实现继承方式

    JavaScript实现继承共6种方式:原型链继承、借用构造函数继承、组合继承、原型式继承、寄生式继承、寄生组合式继承。

  • 前端面试题总结【38】:javascript继承的 6 种方法

    原型链继承 借用构造函数继承 组合继承(原型+借用构造) 原型式继承 寄生式继承 寄生组合式继承 推荐: 持续更新...

  • JS类的继承

    1.类式继承 构造函数继承 3.组合继承 4.原型继承 5.寄生式继承 6.寄生组合式继承

  • js的继承

    面向对象的继承方式有很多种,原型链继承、借用构造函数继承、组合继承、原型式继承、寄生式继承、寄生式组合继承、深拷贝...

  • javascript继承

    原型链继承 寄生式组合继承

网友评论

      本文标题:组合寄生继承和组合继承

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