class Person {
constructor(name,age){
this.name = name;
this.age = age;
}
// 思考: speak对象放在了哪里? ----类的原型对象(prototype)上(实例对象上面没有),供实例使用。
speak(){
console.log(`I am ${this.name}, ${this.age} years old.`);
}
}
// 继承
class Student extends Person {
// constructor也可以不写,如果写了就必须有super来继承父亲的属性
constructor(name,age,grade){
super(name,age); // 如果是继承,则必须有super继承父类当中的属性
this.grade = grade;
}
speak(){
console.log(‘重写了父类继承过来的方法!‘)
}
study(){
// 思考??: study方法放在了哪里? --累的原型对象上,供实例使用
console.log(‘studying...‘);
}
}
// Instantiation
let p1 = new Person(‘Jone‘, 18);
let p2 = new Student(‘Mary‘,16, 3); // 如果调用了子类中的不存在方法,会顺着原型链查找,查找父亲节点有没有。
p1.speak();
p2.speak();
// p1.speak.call(someObject) // call()可以更改某个类的方法的this对象
// ===========================
js面向对象编程