原型与原型链

59 阅读2分钟

原型

  • javascript常被描述为一种基于原型的语言---每个对象拥有一个原型对象
  • 当试图访问一个对象的属性时,它不仅仅在该对象上搜寻,还会依次搜寻该对象的原型,以及该对象的原型的原型,依次层层向上搜索,直到找到一个名字匹配的属性或到达原型链的末尾
  • 这些属性和方法定义在object的构造器函数之上的prototyp属性上,而非实例本身

原型链

  • 原型对象也可能拥有原型,并从中继承方法和属性,一层一层,依次类推,这种关系就是原型链
  • 在对象实例和她的构造器之间建立一个连接(它就是_proto_属性,是从构造函数的prototype属性派生的),之后通过上溯原型链,在构造器中找到这些属性和方法

总结

  • proto 作为不同对象之间的桥梁,用来指向创建她的构造函数的原型对象的
  • 每个对象的proto_都是指向她的构造器函数的原型对象prototype
  • 构造函数是一个函数对象,是通过function构造器产生的
  • 原型对象本身是一个普通对象,而普通对象的构造函数都是object
  • 所有的构造器都是函数对象,函数对象都是function构造产生的
  • object的原型对象也有_proto_属性指向null,null是原型对象的顶端
  • 一切对象都是继承自object对象,object对象直接继承根源对象null
  • 一切函数对象都是继承自function对象
  • object对象直接继承function对象
  • function对象的_proto_会指向自己的原型对象,最终还是继承自object对象