通过extends关键字来实现继承
extend单词本身的意思就是 扩大,扩展
//书写格式
class A{}
class B extends A{
constructor(){
super()
}
}
super关键字
class A{
constructor(){
this.name = 'A'
console.log(this.name)
}
getNum(){
alert(1)
}
}
class B extends A{
constructor(){
super()
// this.name = 'B'
}
}
let b = new B()
console.log(b.name)
// 'A' 如果上边的this.name = 'B'
//执行的话,那么就意思是在B里面也有了一个属性name,在B的实例对象
//中去查找的话,就不会去原型链上去找了
b.getNum() //弹出 1
在这个案例中 super( ) 把当前的this 绑定到了 A的this,所以在这里可以使用A上的属性或方法了
super()作为对象在调用时普通方法会指向父类的原型对象
class A{
constructor(){
this.name = 'A'
console.log(this.name)
}
op(){
alert(1)
}
}
class B extends A{
constructor(){
super()
super.op() //在这里使用super当作一个对象
/*
super.op() 就相当于 A.prototype.op()
直接调用父类原型上的方法
当被实例化的时候,就会弹出 1
*/
}
}
let b = new B()
例二
class A {
constructor() {
this.x = 1
}
printX(){
console.log(this.x)
}
}
class B extends A {
constructor() {
super()
this.x = 2
}
m(){
super.printX()
}
}
let b = new B()
b.m()
在上面的例子中 最后调用 b.m()结果为2
b.m() => super.printX() => console.log(this.x)
这里的this是B ,B上有x属性,就不去原型上找了就 如果B里没有this.x = 2这一句,那么就会想上一层找,结果为1