对象的定义其实很广泛,万物皆为对象,我们创建对象一般都是用构造函数来创建的,这里我们来说说构造函数创建对象的原型图把.
这个问题有点抽象,举个例子来说,方便一点:
这是我们构造函数,这里我们要结合一张 图来说明就更清楚了,这里我们就用一个实例p1好了,其他两个就不用了.
这是构造函数和实例的初始关系,person就是这个构造函数,它里面其实有个属性叫prototype,prototype属性的值也是个对象,而这个对象其实就是称作构造函数的原型对象.到这里那上面那张图里应该要多谢东西了:
这个原型对象是有prototype而产生的,那这个原型函数里也有个特殊的属性叫做constructor,它的值其实就是构造函数本身person,原型对象我们也是可以给他加属性的,例如:
这样上面原型图有变了:
然而构造函数的实例和原型对象有关系吗?其实也是有关系的.原型对象中的属性是可以被实例共享的,那为什么可以共享呢?因为实例中其实有一个属性叫__proto__.它的值也是原型对象.
Person.prototype===p1.__proto__ 是完全相等的.
因为可以共享,所以这里其实p1.constructor得到就是person构造函数本身,
这里要注意一点,当你要获取一个对象的属性时,第一步会先从自身来找,如果自己的属性中没有,才会从原型对象中接着查找,一直一层一层查找下去.