1、首先需要明白一个知识点:一个需要共享并且通过实例对象调用的方法,是在构造函数的原型对象中的。(实例对象原型__proto__指向构造函数的原型,即prototype)
通过查看join方法得到,join是在构造函数的原型对象中的。
2、进入正题,开始解释:
(1)实例对象通过构造函数进行创建,原型对象是有了构造函数就会产生的。
(2)构造函数中的属性通过结构(dir)查看时不在构造函数中而是在实例对象中的,构造函数里有个原型对象(prototype),原型对象里有个构造器(constructor),指向构造函数。下图查看构造函数的结构。
(3)添加代码查看实例对象的结构(上图注释放掉)
(4)__proto__和prototype的指向是相同的,原型对象中的方法可以被实例对象所共享。
实例对象中没有方法,但是可以调用,是因为实例对象的原型__proto__指向了构造函数的原型对象(桥梁),所以可以调用。
(5)方法的调用原来是可以通过per.__proto__.eat()来调用,但是因为__proto__是给浏览器看的,并不是标准的,所以用per.eat()来调用。
以上属于个人学习总结,有误之处,还请指正。