class-为子类挂载独有的实例属性和实例方法
一、为子类挂载独有的实例属性和方法
class Person{
constructor(name,age){
this.name = name
this.age = age
}
sayHello(){
console.log(‘大家好’)
}
}
class American extends Person{
constructor(name,age){
//问题1:为什么一定要在constructor中调用super
//答案:因为如果一个子类,通过extends关键字继承了父类。那么在子类constructor构造函数中,必须优先调用super()
//问题2:super是什么东西?
//答案:super是一个函数,而且它是父类的构造器,子类中的super其实就是父类中,constructor构造器的一个引用
//问题3:为什么调用了super之后,a1实例的name和age都变成了undefined了?
super(name,age)
}
}
const a1 = new American(‘Jack’,20)
console.log(a1)
a1.sayHello()
class Chinese extends Person{
//name姓名
//age年龄
//IDNumber身份证号 【中国人独有】 既然是独有的,就不适合挂载到父类
constructor(name,age, IDNumber){
//语法规范,在子类中,this只能放到super之后使用
this.IDNumber = IDNumber
super(name,age)
}
}
const c1 = new American(‘张三’,20,’130428*******’)
console.log(c1)
c1.sayHello()
实例属性:是通过new出来的实例访问到的属性
class Animal{
//类中的构造器
constructor (name,age)
{
this.name=name; // 实例属性
this.age=age; // 实例属性
}
}
console.log(a1.name)
console.log(a1.age)
实例方法:挂载到原型对象prototype上的方法
function Person(name,age)
{
this.name=name;
this.age=age;
}
//实例方法
Person.prototype.speak=function()
{
console.log("Person的实例方法")
}
p1.speak();
实例方法在调用时 通过创建出的对象调用