作者: 转移到CSDN名字丹丹的小跟班 | 来源:发表于2021-02-19 09:41 被阅读0次

    es6里面使用class创建类,类里面默认会有一个constructor方法,用于接收参数将其放进实例自身。es6会自动开启严格模式。

    class Parent {
        constructor(x, y) {
            //给实例设置私有属性
            this.x = x
            this.y = y
        }
        //直接写在类里的方法相当于在Parent.prototype上创建方法
        render() {
        }
        //函数也是一个对象,也可以直接给这个对象添加方法(与实例无关,使用Parent.fun()进行调用)
        static fun() {
      }
      //想在原型上添加属性,不能直接在类里面添加,只能在类的外面使用Parent.prototype.AA = 'dandan'进行添加
      AA = 'dandan'  //相当于在实例上添加属性。
    //想在这个对象(也就是类)添加私有属性,不能直接在类里面添加,只能在类的外面使用Parent.AA = 'dandan'进行添加
      static AA = 'dandan'  //无效
    }
    
    //当执行new parent(1,2)时,首先会执行constructor方法。
    new Parent(1, 2)
    

    类的实例只能调用类的原型的方法和属性,不能使用静态方法和属性

    注意:在es6创建类的{}里面只能创建方法(而且不能写箭头函数),不能设置类的属性,属性需要拿到外面进行设置(但已经被拿到es7提议,并且一些babel解析器会默认解析在类里面创建属性的写法)。可以设置实例属性。

    继承

    class Children extends Parent {
        constructor() {
        super()  //写了constructor必须写super方法,相当于Parent.constructor.call(this)
        }
    }
    

    在es6继承中,父类的构造器会自动被子类继承。但在构造器里面第一行必须写supper(),supper方法其实是在帮子类调调用父类的构造器。

    子类会继承父类的静态方法和静态方法,但是子类实例不会,实例只能继承父类的原型方法和属性。

    当父类方法与子类方法重名时,子类实例会优先调用子类的方法。

    相关文章

      网友评论

          本文标题:

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