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 这个对象的信息
运行后打印台输出
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
。