1、原型链概念:
(1)对象的创建;(2)对象的组织结构;(3)对象访问成员规定
2、原型就是对象
函数对象——指的就是平时称呼的对象
实例对象——new出的对象
原型对象——所有的函数对象都有一个对应的原型对象,所有的原型对象都是被Object函数对象创建出来的
3、原型链的创建过程:
(1)源头:Function函数是对象自动产生的第一个对象(在数据段中)
(2)除了Function函数对象之外,所有的函数对象都是由Function函数对象创建的 (我们自己写的函数对象也是由Function创建的)
(3)Function会自动创建出很多函数对象出来
(4)Function自动创建的第一个函数对象是Object函数对象
(5)Function还会自动创建出的函数对象有:Object,Date等一系列的内置函数对象
函数对象:
所有的函数对象中都有一个名字叫prototype的引用类型变量,该引用类型变量是函数对象的成员,该引用类型变量的值是对应的原型对象的引用值,即我们平常所说的prototype指向原型对象
(一个对象中如果有prototype,则该对象一定是函数对象,如果对象是函数对象,则其中一定有prototype)
原型对象:
所有的原型对象中都有一个名为constructor引用类型变量,该引用类型变量是原型对象的成员,该引用类型变量的值是对应的函数对象的引用值,即我们平常所说的constructor指向函数对象
(一个对象中如果有constructor,则该对象一定是原型对象,如果对象是原型对象,则其中一定有constructor)
实例对象
实例对象是被对应的函数对象创建的
所有对象中都有一个名为__proto__引用类型变量,该引用类型变量是对象的成员,该引用类型变量的值是创建它的对象的原型对象的引用值,即谁创建了这个对象,这个对象的__proto__就指向这个创建对象的原型对象(特殊的不算)
特殊的有
(1)Function函数对象中__proto__的值为原型对象的引用值(即__proto__指向Function原型对象,自己指向自己没有意义)
(2)Object原型对象中__proto__的值为null
4、对象访问成员的过程:
(1)当前对象中如果有该成员就访问到该成员,访问结束
(2)当前对象中如果没有该成员,则到__proto__指向的对象中找成员,找到结束,如果还是没有找到,又通过__proto__指向的对象中去找