ES6 class 类 extends 继承 super

class person{
    constructor(age,sex){
    this.age=age
    this.sex=sex
    this.hobby="running"
    this.name="ling"
    }
    say(word){
        alert(word)
    }
}

let ling=new person()
     ling.say("hello") //alert("hello")
 
class baby extends person{
    constructor(){
        super("5months","female") //这里和上面person 类在 constructor 传入的两个参数
        this.name="xinxin"
        this.food="milk"         //constructor 中,可以添加新属性,或者其他代码
        alert("这个是baby类")
    }
}

let xinxin =new baby()

console.log(xinxin)    //constructor 内所有代码被执行;打印台中显示 xinxin 这个对象的内容
console.log(xinxin.age)
console.log(xinxin.food)

 

console.log(xinxin)
console.log(xinxin.age)
console.log(xinxin.food)

运行后效果:执行了 constructor中的所有代码(alert("这个是baby类")),并在控制台 返回了 xinxin 这个对象的信息

ES6 class 类 extends 继承 super_第1张图片 运行后打印台输出  

class:

上面代码首先用class定义了一个“”,可以看到里面有一个constructor方法,这就是构造方法,而this关键字则代表实例对象。简单地说,constructor内定义的方法和属性是实例对象自己的,而constructor外定义的方法和属性则是所有实例对象可以共享的。constructor 中可以写任意代码(可以新增属性、方法,或设置值,也可以是其他任意代码,且可运行)

extends:

class之间可以通过extends关键字实现继承,这比ES5的通过修改原型链实现继承,要清晰和方便很多。上面定义了一个Cat类,该类通过extends关键字,继承了Animal类的所有属性和方法。

super:

super关键字,它指代父类的实例(即父类的this对象)。子类必须在constructor方法中调用super方法,否则新建实例时会报错。这是因为子类没有自己的this对象,而是继承父类的this对象,然后对其进行加工。如果不调用super方法,子类就得不到this对象。super(args)可以传参:如果父类 constructor(args) 传入参数args,super(args) 可以把参数值传入,赋值给子类相关的属性值。

constructor(age,sex)

例如,例子中父类person 在 constructor 传入了 age和sex 两个参数。当使用 super 关键字时,super(arg1,arg2) 传入 arg1 和arg2 将会赋值给相对应的属性 (父类对应的是 this.age 和 this.sex)

ES6的继承机制,实质是先创造父类的实例对象this(所以必须先调用super方法),然后再用子类的构造函数修改this

你可能感兴趣的:(es6,js)