原型与原型链
1、构造函数
· 自定义构造函数(如Person)
· Function
· Array
· Object
每个使用构造函数生成的实例对象都有一个prototype属性
prototype可理解为JavaScript为每个构造函数底层实现的一套属性和方法的集合,让每个实例对象继承这一套方法集合。
2、prototype
这是函数所特有的,是函数的属性,指向一个对象
3、__proto__
每个JavaScript对象(null除外)都会有一个__proto__属性,这个属性指向该对象的原型
4、constructor
对象的原型通过constructor属性指向关联的构造函数
当读取实例的属性时,如果找不到,就会查找与对象关联的原型中的属性,如果还查不到,就去找原型的原型,一直找到最顶层为止。
5、关系图
这里可以理解为:
· 自定义的构造函数Person的prototype属性指向一个对象,这个对象就是Person的原型,由于Person.prototype是通过new Object()生成的,因而Person.prototype又通过__proto__指向Object.prototype
· Person.prototype === person.__proto__
Person.prototype.__proto__ === person.__proto__.proto__
Function.__proto__ === Function.prototype
这里应该可以理解为Function其实是Object是一个实例,同时也是构造函数