// 父类
class People {
constructor(name){
this.name = name
}
eat(){
console.log('测试一下原型链');
}
}
// 子类 extends继承父类
class Student extends People {
constructor(name,number){
// super用来继承父类的属性
super(name)
this.number = number
}
sayHi(){
console.log(`name${this.name},number${this.number}`);
}
}
// 子类
class Teacher extends People {
constructor(name,major){
super(name)
this.major = major
}
sayHi(){
console.log(`name${this.name},number${this.number}`);
}
}
// 实例
const xialuo = new Student('xialuo',100)
// console.log(xialuo.number);
xialuo.sayHi();
xialuo.eat();
const laoshi = new Teacher('teacher',200)
laoshi.sayHi();
laoshi.eat();
console.log(xialuo.__proto__); //隐式原型
console.log(Student.prototype,'---'); //显示原型
console.log(People.prototype,'prople的原型');
console.log(xialuo.__proto__ === Student.prototype);
console.log(Student.prototype.__proto__ === People.prototype)
console.dir(xialuo);
console.dir(Student)
原型关系
1、每个class都有显示原型prototype
2、每个实例都有隐式原型__proto__
3、实例的__proto__指向对应class的prototype
原型链
个人理解 :比如实例要调用一个方法, 比如People的eat方法,首先这个Student的实例会先向Student的这个类的prototype中找,如果没有找到会一直向上找然后找到People中找,找到了则执行这个方法,如果没有会接着向上找,这样就行成了原型链,纯属个人理解,如有不对请及时指出,共同学习