__proto__和prototype的区别,刚看到一句解释是这样的:
__proto__是站在对象的角度讨论原型对象。
prototype是站在构造函数的角度讨论原型属性,或构造函数创建的对象的原型对象。
仍然不是很理解,请大神帮展开来再说一下。所谓展开大概就是像知乎那样啰嗦的讲一下“我是谁,我从哪里来,我要到哪里去”3个问题。
或者换个说法,就是讲一个东西的时候,一般从3个维度来讲,
1、这个东西是什么?
2、这个东西有什么用?
3、这个东西怎么用?
如果不讲清楚这3个问题,就理解不了,因为我比较傻。谢谢。
另外有个具体的问题是:
最后一句“构造函数创建的对象的原型对象”,意思是当new一个对象的时候,这个new出来的对象是由构造函数创建的?
给你看三张图片:

javascript是基于对象的,换一种说法是基于原型(链)的。
每一个函数都有一个prototype(原型)属性,这个属性是一个对象,它的用途是包含可以由特定类型的所有实例共享的属性和方法。prototype是通过调用构造函数来创建的那个对象的原型(属性)对象。
Javascript中对象的prototype属性,可以返回对象的 原型对象 的引用。
怎么理解原型(链)?
图1
函数(对象)有prototype属性->对应了一个原型对象->每个原型对象都有一个constructor属性->包含一个指向prototype属性所在函数的指针
每一个实例都有一个内部属性__proto__->指向原型对象
这里提到的几个属性或对象:
Person.prototype;//->原型对象
Person.prototype.constructor;//->指向构造函数
p.__proto__;//->指向原型对象