1 通过函数创建一个对象
2 prototype
只有函数才有prototype这个属性,prototype指向实例对象的原型对象,通过同一个构造函数实例化的多个对象具有相同的原型对象。
typeof Person.prototype输出Object
访问原型对象的方式:
person1.constructor.prototype.attr;
Person.prototype.attr;
篡改Person的非prototype对象不会影响已经创建的person对象们
3 __proto__
__proto__属于对象
4 prototype、proto和constructor的三角关系
原型对象有一个constructor属性,指向该原型对象对应的构造函数(
对于实例对象p1:
(1)constructor属性: 继承原型对象Foo.prototype的constructor属性,也就是构造函数
(2)__proto__属性:指向原型对象Person.prototype
对于构造函数Person:
(1)constructor属性:Function
(2)__proto__属性:指向原型对象Function.prototype
(3)prototype属性:指向Person.prototype
对于原型对象prototype:
(1)constructor属性:具有constructor属性,会覆盖继承自原型对象Object.prototype的constructor属性
(2)_proto__属性:指向Object.prototype
注意:Function的constructor属性指向Function本身;
Function的prototype指向Object.prototype
Object.prototype的原型对象是null
For proto:
对于函数而言:Person/Object/Function------>Function.prototype------>Object.prototype------>null;
对于函数创建的实例变量:p1------>Person.prototype------>Object.prototype------>null;
对于直接创建的对象:p1------>Object.prototype------>null
For prototype:
Function------>Function.prototype
Object------>Object.prototype
Person------>Person.prototype
For Constructor:
Person/Object/Function----->Function
xxx.prototype------>xxx