es6 class

class Animal {

    // 注意在 class 的 {} 区间内 只能写 构造器,静态属性和静态方法
    //注意2  class 关键字内部还是用的 js 方法来实现的。所以我们把class称为 语法糖。


    //这是类中的构造器
    // 每一个类中,都有一个构造起,如果我们程序员没有手动指定构造器,那
    // 么,可以认为类内部有个隐形的看不见的,空构造函数类似与 constructor()

    // 构造器的作用,就是 每当 new 这个类的时候,必然会优先执行构造函数的代码。

    // 类似于 构造函数 用 new 创建的 时候 会执行 构造函数体的 代码块  就是实例属性


    /*

        function Animal(name,age) {
            this.name = name
            this.age = age

        }
        new Animal('333',12)
    * */


    constructor(name, age) {
        this.name = name
        this.age = age

    }


    // 静态属性 :通过构造函数 直接访问倒跌属性,就叫做静态属性

    /*
    function Animal(name,age) {
        this.name = name
        this.age = age

    }
    var ani = new Animal('333',12)

    Animal.info = 1000
    Animal.showName = function(){}

    用 实例 ani.info 是取不到的   打印 undefined
    ani.show 没有这个方法

    * */


    static info = 'eeeee'
    // 只能通过 Animal.info 去使用

    static showName = function () {

    }

    // 只能通过 Animal.showName 去使用


    // 创建共同的方法 类似于 构造函数 原型链上的方法  可以在实例 上调用

    say() {
        console.log('简洁的军事基地')
    }
}


// class 继承


// 在class类中,可以使用extends 关键字,实现子类继承父类

// 语法 class 子类 extends 父类
class Person {
    constructor(name,age) {
        this.name = name
        this.age = age

    }

    sayHello(){
        console.log(1122122122)
    }

    static foo = 12222
}



class America  extends  Person{

    // 如果子类不写constructor 那么就会默认调用父类的  如果从写 要使用 父类的 数据,必须传参数

    constructor(name,age){
        //  问题1 ? 为什么要在 constructor 中调用super
        // 答案 因为 如果一个子类 通过extends 关键字继承了 父类那么在子类的constructor 构造函数中,必须优先调用一下 super()
        //  问题2  super 是什么

        // 答案 super 是一个函数,而且它是 父类构造器,。子类中的 super。其实就是 父类中,constructor构造器的一个医用


        //  问题3  为什么调用了super() 之后 a1 实例 对的 name 和 age 都变成了undefined 了?
        super()


        // 如果 想要给父类 的constructor 传参数,就要在 super 中传递参数

        // super(name,age)


    }




}

const a1 = new America('jack',30)
console.log(a1)
a1.sayHello()
console.log(America.foo)

class Chinese  extends  Person{
    constructor(name,age,cardId){


        // 在子类中 this只能在 super 之后使用
        super(name,age)
        this.cardId = cardId
    }




}
const a2 = new Chinese('jack',30,5002225)
console.log(a2)

你可能感兴趣的:(es6 class)