原型与原型链
原型
- javascript常被描述为一种基于原型的语言---每个对象拥有一个原型对象
- 当试图访问一个对象的属性时,它不仅仅在该对象上搜寻,还会依次搜寻该对象的原型,以及该对象的原型的原型,依次层层向上搜索,直到找到一个名字匹配的属性或到达原型链的末尾
- 这些属性和方法定义在object的构造器函数之上的prototyp属性上,而非实例本身
原型链
- 原型对象也可能拥有原型,并从中继承方法和属性,一层一层,依次类推,这种关系就是原型链
- 在对象实例和她的构造器之间建立一个连接(它就是_proto_属性,是从构造函数的prototype属性派生的),之后通过上溯原型链,在构造器中找到这些属性和方法
总结
- proto 作为不同对象之间的桥梁,用来指向创建她的构造函数的原型对象的
- 每个对象的proto_都是指向她的构造器函数的原型对象prototype
- 构造函数是一个函数对象,是通过function构造器产生的
- 原型对象本身是一个普通对象,而普通对象的构造函数都是object
- 所有的构造器都是函数对象,函数对象都是function构造产生的
- object的原型对象也有_proto_属性指向null,null是原型对象的顶端
- 一切对象都是继承自object对象,object对象直接继承根源对象null
- 一切函数对象都是继承自function对象
- object对象直接继承function对象
- function对象的_proto_会指向自己的原型对象,最终还是继承自object对象