• ES6继承


    1.继承方式

    ES6中使用extends关键字实现继承

    class subType extends superType{
        ...
    }

    与es5的继承,子类创建自己的this,然后父类对其加工不同,es6的继承原理是,继承父类的this,并在此基础上进行修改。因此,实现继承必须要在constructor中调用父类的构造函数,super:

    class subType extends superType{
        constructor(){
            super();
            ...
        }
    }

    如果子类没有定义constructor函数,那么将默认添加这个方法。

    2.super关键字

    1.super当作函数

    super当作函数只能放在constructor()函数中进行使用,表示父类的构造函数。

    2.super当作对象

    super当作对象又可分为表示子类的this,和表示父类

    2.1super表示子类的this

    当对super进行赋值操作时,super被当成是子类的this。对super的某属性进行赋值就相当于对子类的this中的该属性进行赋值操作。

    class subType extends superType{
        constructor(){
            super();
            this.name="sub";
            super.name="haha"
            console.log(this.name);   //"haha"
        }
    }

    2.2super表示父类对象

    当对super进行取值操作时,super表示父类对象

    class superType{
        showName(){
            console.log(this.name);
        }
    }
    
    class subType extends superType{
        constructor(){
            super();
            this.name="sub";
            super.showName();   //"sub"
        }
    }

    这里表示在子类上下文中调用父类的showName方法,因此showName的this是子类的this

    prototype属性

    子类的__proto__属性指向父类,表示构造函数的继承。

    子类的prototype的__proto__指向父类的prototype:表示原型的继承。

    三种特殊情况:

    1.子类继承Object

    class A extends Object{
    }
    A.__proto__===Object//true
    A.prototype.__proto__===Object.prototype//true

    2.子类没有任何继承

    class A{
    }
    A.__proto__===Function.prototype//true
    A.prototype.__proto__===Object.prototype//true

    3.子类继承null

    class A extends Null{
    }
    A.__proto__===Object//true
    A.prototype.__proto__===undefined//true

    原生构造函数的继承

    ES6可以对原生的构造函数进行继承和修改。ES5不能构造函数的修改,是因为ES5的继承方式是创建自己的this,然后调用父类构造函数进行修改,原生构造函数会忽略通过apply改变this的操作。而ES6直接继承父类的this。

  • 相关阅读:
    一、链式
    C#链式编程
    五、通过密码访问API
    四.二、控制台
    一、bootstrap-datepicker
    悔录
    四、IDS4建立Authorization server和Client
    三、IDS4建立authorization server
    一、前端请求后台方式
    【2019-10-09】思想是为了克服不懂而存在的
  • 原文地址:https://www.cnblogs.com/cff2121/p/13214202.html
Copyright © 2020-2023  润新知