ES6 class-继承 和 constructor中的super函数的使用

注意1:在 class 的 { } 区间内,只能写 构造器、静态方法、静态属性、实例方法
注意2:class 关键字内部,还是用的原来的配方实现的,所以说,class 关键字,称作为 语法糖

class-继承

在class 类中, 通过使用 extends 实现继承的
语法:class A extends B { }

//这是父类【大家可以直接把父类理解成原型对象 prototype】
class Person{
	constructor(name,age){
		this.name=name;
		this.age=age;
	}
	//共同的打招呼实例方法
	sayHello(){
		console.log('大家好!!!')
	}
}
//这是子类,美国人
//在 class 类中,可以使用 extends 关键字,实现子类继承父类
class American extends Person{
	
}
const a1 = new American('Jack',20);
console.log(a1);
a1.sayHello();
//子类,中国人
class Chinese extends Person{
	
}
const c1 = new Chinese('张三',22);
console.log(c1);
c1.sayHello();

子类中constructor构造器中的super函数的使用

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

问题2:super 是个什么东西?
答案2: super 是个函数,而且 ,它是 父类的 构造器;子类中的 super ,其实就是父类中,constructor 构造器的一个引用

问题3:为什么 调用了 super() 之后,a1 实例的 name 和 age 都变成了 undefined 了?
答案: 因为super 是父类 constructor 构造器的一个引用,没有对应的参数传过去,所以就是 undefined了。


:如果 不在子类中写,constructor 构造器,那么默认会把参数传给父类;如果写了,看下边一步步传参图解


class Person{
	constructor(name,age){
		this.name=name;
		this.age=age;
	}
	//共同的打招呼实例方法
	sayHello(){
		console.log('大家好!!!')
	}
}
class American extends Person{
	constructor(name,age){
		super(name,age)
	}
}
const a1 = new American('Jack',20);
console.log(a1);
a1.sayHello();
class Chinese extends Person{
	constructor(name,age){
		super(name,age)
	}
}
const c1 = new Chinese('张三',22);
console.log(c1);
c1.sayHello();

图解:
在这里插入图片描述


注意事项
// 子类,中国人
class Chinese extends Person {
    // 如果不写constructor,默认会把两个参数传给父类,写的话,要自己传参
    constructor(name, age, IDNumber) {
        // name 姓名,age 年龄, IDNumber 身份证号【中国人独有】这个不是个挂到父类

        super(name, age)
        // 必须放到 super 后
        this.IDNumber = IDNumber
    }

}

注意: 一定 要 优先 调用 super 函数,任何操作都要放到 super 函数后边!!!

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值