由以上代码可知
在正常的情况下,即
var stu = new Student();
通过Student构造函数,创建了一个Studet实例对象stu
那么 stu 的非标准原型对象__proto__
根据原型链指向stu的构造函数 Student
的标准原型对象prototype
,而sayHi() 方法是添加到原型中的的方法,自然stu局可以调用 sayHi() 方法
但是
通过 Student.prototype = new Person()
把Student 构造方法 的标准原型对象 指向了Person的实列对像,进而,Student 的 标准原型对象 prototype
就会指向 Person的实例对象的非标准原型对象 __proto__
通过开始的原型链分析,Person 的非标准原型对象 __proto__
必然指向 Person 的标准原型对象 prototype
,而,Person 的 eat() 方法是通过Person 的标准原型对象 prototype
来添加的
那么
Student 的实列对象 stu 就必然能调用 Person 的方法,eat()