JS 的继承

JS 的继承实现方式:
第一种:原型链继承
缺点:两个实例使用的是同一个原型对象,它们的内存空间是共享的,当一个发生变化的时候,另外一个也随之进行了变化,

第二种:构造函数继承(借助 call)

    function Parent1(){
        this.name = 'parent1';
    };
    Parent1.prototype.getName = function () {
        return this.name;
    };
    function Child1(){
        Parent1.call(this);
        this.type = 'child1'
    };
    let test = new  Parent1();
    console.log(test); // {name: "parent1"}
    let child = new Child1();
    console.log(child);  //{name: "parent1", type: "child1"}
    console.log(child.getName());  // 会报错

优点:它使父类的引用属性不会被共享
缺点:只能继承父类的实例属性和方法,不能继承原型属性或者方法。

第三种:组合继承(原型链继承和构造函数继承组合)

    function Parent3 () {
        this.name = 'parent3';
        this.play = [1, 2, 3];
    };
    Parent3.prototype.getName = function () {
        return this.name;
    };
    function Child3() {
        // 第二次调用 Parent3()
        Parent3.call(this);
        this.type = 'child3';
    };
    // 第一次调用 Parent3()
    Child3.prototype = new Parent3();
    // 手动挂上构造器,指向自己的构造函数
    Child3.prototype.constructor = Child3;
    var s3 = new Child3();
    var s4 = new Child3();
    s3.play.push(4);
    console.log(s3.play, s4.play);  // 不互相影响
    console.log(s3.getName()); // 正常输出'parent3'
    console.log(s4.getName()); // 正常输出'parent3'

第四种:原型式继承( Object.create 方法:这个方法接收两个参数:一是用作新对象原型的对象、二是为新对象定义额外属性的对象(可选参数) )

第五种:寄生式继承
使用原型式继承可以获得一份目标对象的浅拷贝,然后利用这个浅拷贝的能力再进行增强,添加一些方法,这样的继承方式就叫作寄生式继承。

第六种:寄生组合式继承


image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 关于js继承的文章一直以来是数不胜数,每隔一段时间就会复习一下,感觉明白了,但是过段时间又忘记了。有人说ES6的c...
    web_柚子小记阅读 12,629评论 0 15
  • 提到JS继承,你首先想到的什么? 面试 继承方式 优缺点...,js继承作为曾经的苦主,我看了忘,忘了看,看了又忘...
    唐_银阅读 3,427评论 0 6
  • 继承6种套餐 参照红皮书,JS继承一共6种 1.原型链继承 核心思想:子类的原型指向父类的一个实例 Son.pro...
    灯不梨喵阅读 8,347评论 1 2
  • ES5 有 6 种方式可以实现继承,分别为: 1. 原型链继承 原型链继承的基本思想是利用原型让一个引用类型继承另...
    意切阅读 1,703评论 0 0
  • 面向对象的继承方式有很多种,原型链继承、借用构造函数继承、组合继承、原型式继承、寄生式继承、寄生式组合继承、深拷贝...
    六月繁花开阅读 2,675评论 0 1