//创建一个Preson类
class Person {
//构造器方法
constructor(name, age) {
//构造器中的this是类的实例对象
this.name = name;
this.age = age;
}
//一般方法
speak() {
//speak方法放在了—— 类的原型对象上,是给实例用的
//通过Person实例调用speak时,speak中的this就是Person实例
console.log(`我叫${this.name},我的年龄是${this.age}`);
}
}
//创建一个student类,继承Person类
class Student extends Person {
//继承Person,
constructor(name, age, grade) {
super(name, age); //super必须放在最前面
this.grade = grade;
this.school = '中公';
}
speak() {
//重写从父类继承的方法
console.log(`我叫${this.name},我的年龄是${this.age},我读的是${this.grade}`);
}
study() {
//study方法放在了—— 类的原型对象上,是给实例用的
//通过Person实例调用studyk时,study中的this就是Student实例
console.log('我很努力地学习');
}
}
注意:
1.类中的构造器不是必须要写的,要对实例进行一些初始化的操作,如添加指定属性时才写
2.如果A类继承了B类,且A类中写了构造器,那么A类构造器中的super是必须要调用的
3.类中定义的方法,都是放在原型对象上的,供实例区使用
class Car {
constructor(name, price,wheel) {
this.name = name;
this.price = price;
// this.wheel = wheel;
}
//类中可以直接写赋值语句,如下代码的含义是给car的实例对象添加一个属性,名为a,值为1
a = 1
wheel = 4;
}
const c1 = new Car('奥迪', 199);
console.log(c1);
实例对象和函数对象上的属性是不相通的,函数上的属性是属于函数对象的,并不属于实例对象,这样的属性成为静态成员
换到面向对象里面,静态属性属于类而不属于实例对象
实例对象的属性和构造函数原型对象上的属性是相通的
class Phone{
//静态属性
static name = '手机';
}
let nokia = new Phone();
console.log(nokia.name);//undefined
console.log(Phone.name);//手机