class apple {
constructor(color,name){
this.color = color
this.name = name
}
saize(size){
console.log(this.color+this.name+'苹果的大小是'+size);
}
sayhi(){
console.log(this.color+this.name);
return this.color+this.name
}
}
let a = new apple('red') // 实例化这个apple
a.saize(10) // 调用saize方法
let b = new apple('red','红富士')
b.sayhi()
class pear extends apple{ // pear继承父类apple
constructor(color,type){
super(color) // 调用父类的构造函数中的color,没有调用的name
this.type = type
}
sayHello(){
console.log('你好',this.type);
}
}
let c = new pear('红色','红色的苹果')
c.saize() // 调用父类的方法中的saize方法(构造函数中没有调用的name会打印为undefined)
c.sayHello() // 调用pear中的sayHello方法
ES6 规定,子类必须在constructor()
方法中调用super()
,否则就会报错。这是因为子类自己的this
对象,必须先通过父类的构造函数完成塑造,得到与父类同样的实例属性和方法,然后再对其进行加工,添加子类自己的实例属性和方法。如果不调用super()
方法,子类就得不到自己的this
对象。
另一个需要注意的地方是,在子类的构造函数中,只有调用super()
之后,才可以使用this
关键字,否则会报错。这是因为子类实例的构建,必须先完成父类的继承,只有super()
方法才能让子类实例继承父类。