JS中构造函数、实例对象和原型对象三者之间的关系

1、首先需要明白一个知识点:一个需要共享并且通过实例对象调用的方法,是在构造函数的原型对象中的。(实例对象原型__proto__指向构造函数的原型,即prototype)

JS中构造函数、实例对象和原型对象三者之间的关系_第1张图片    JS中构造函数、实例对象和原型对象三者之间的关系_第2张图片

通过查看join方法得到,join是在构造函数的原型对象中的。

2、进入正题,开始解释:

(1)实例对象通过构造函数进行创建,原型对象是有了构造函数就会产生的。

(2)构造函数中的属性通过结构(dir)查看时不在构造函数中而是在实例对象中的,构造函数里有个原型对象(prototype),原型对象里有个构造器(constructor),指向构造函数。下图查看构造函数的结构。

JS中构造函数、实例对象和原型对象三者之间的关系_第3张图片JS中构造函数、实例对象和原型对象三者之间的关系_第4张图片

(3)添加代码查看实例对象的结构(上图注释放掉)

JS中构造函数、实例对象和原型对象三者之间的关系_第5张图片

(4)__proto__和prototype的指向是相同的,原型对象中的方法可以被实例对象所共享。

实例对象中没有方法,但是可以调用,是因为实例对象的原型__proto__指向了构造函数的原型对象(桥梁),所以可以调用。

JS中构造函数、实例对象和原型对象三者之间的关系_第6张图片

(5)方法的调用原来是可以通过per.__proto__.eat()来调用,但是因为__proto__是给浏览器看的,并不是标准的,所以用per.eat()来调用。

 

以上属于个人学习总结,有误之处,还请指正。

你可能感兴趣的:(JS)