js中的继承

本文探讨JavaScript中的五种继承方式:原型链继承、call继承、组合式继承、寄生组合继承和ES6的Class继承。每种方式有其优缺点,如原型链继承可能导致父类实例受影响,而ES6的Class继承简化了语法但本质仍是基于原型链。
摘要由CSDN通过智能技术生成

开篇
JS继承也不像其他语言中的继承一样(其他语言:子类继承父类,就是拷贝一份父类的属性和方法),js中他是把父类的实例放到子类的原型链上,子类实例想要去调用这些属性和方法的时候,实际上是基于__proto__原型链查找的形式去完成的

继承就是让子类继承父类的属性和方法
目的是可以让子类的实例能够使用父类的属性和方法
每一种继承法方式都有它的优缺点

1.原型链继承:

让子类的原型指向父类的实例;

       // 父类构造函数
        function A(x) {
   
            this.x = x
        }
        // 父类原型
        A.prototype.getx = function () {
   
            console.log("getx", this.x);
        }
        let a = new A(100)
        console.log(a);//A {x: 100}

        // 子类构造函数
        function B(y) {
   
            this.y = y
        }
        B.prototype = new A(100)
        B.prototype.constructor = B

        B.prototype.gety = function () {
   
            console.log("gety", this.y);
        }
        // 子类实例
        let b = new B(200)
        console.log(b);//B {y: 200}    

在这里插入图片描述

特点:
子类实例可以直接修改父类上的方法(这样就会导致其它父类实例都会受到影响)。
父类中的私有属性和方法,在实现原型链继承之后都都会变成子类公有的属性和方法。

2.call继承(借用构造函数继承)

在子类内,使用call()调用父类方法,并将父类的this修改为子类的this。相当于是把父类的实例属性复制了一份放到子类的函数内;

       // 父类构造函数
        function A(x) {
   
            this.x = x
            this.say = function () {
   
                console.log('kin');
            }
        }
        // 父类原型
        A.prototype.getx = function (
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值