prototype :每个函数对象都会有prototype,普通对象是没有这个属性的(这里为什么说普通对象呢,因为JS里面,一切皆为对象,所以这里的普通对象不包括函数对象)。它是构造函数的原型对象;
_ proto _ :每个对象都有这个属性,它指向它的构造函数的原型对象;
constructor :这是原型对象上的一个指向构造函数的属性。
每个实例原型都有一个 constructor 属性指向关联的构造函数。
在实例化的时候,prototype上的属性会作为原型对象赋值给实例。
每个函数(函数对象)都有一个prototype(原型)属性这个属性都有一个指针,指向一个对象,这个对象包含由特定类型所有实例共享的属性和方法。使用原型的好处是:可以让所有对象实例共享它包含的方法和属性,可以通过in操作符和hasOwnProperty来判断给定属性是来自于原型还是实例,in- true 代表属性在对象中存在来自实例或者来自原型,hasOwnProperty- true代表属性来自于实例 是实例属性
原型链是JavaScript实现继承的重要方式,原型链的形成是真正是靠proto 而非prototype,实例与原型之间的链条,这就是原型链
函数对象 和 普通对象 都有 proto这个属性。
prototype 和_ proto _都是在创建一个函数或者对象会自动生成的属性。
构造函数的 prototype 指向原型对象,原型对象有一个 constructor 属性指回构造函数,每个构造函数生成的实例对象都有一个 proto 属性,这个属性指向原型对象。
所有的实例的_ proto _都指向该构造函数的原型对象(prototype)。
所有的函数(包括构造函数)是Function的实例,所以所有函数的 _ proto _的都指向Function的原型对象。
所有的原型对象(包括 Function的原型对象)都是Object的实例,所以 _ proto _都指向 Object(构造函数)的原型对象。而Object构造函数的 _ proto _指向 null。
Function构造函数本身就是Function的实例,所以 _ proto _指向Function的原型对象。