原型链图解

原型链的结构

原型链结构图

  1. 每一个对象都是由构造函数创建出来的。
  2. 每一个构造函数都有对应的原型对象。
  3. 原型对象也是一个对象,所以原型对象也是由构造函数创建出来的。
  4. 以上,形成原型链。
  5. 原型链的顶端是Object.prototypeObject.prototype构造出空函数function () {},空函数构造出ObjectFunction
  6. Object.prototype的构造函数是Object
  7. Object.prototype.__proto__ == null
  8. 构造函数的也是一个对象,它的构造函数是Function
  9. Function也是一个对象,它的构造函数是它自己Function
  10. Function的原型对象是空函数function () {}
  11. 空函数function () {}的原型对象是Object.prototype
  12. Objcet的构造函数是Function
  13. Object.__proto__是空函数function () {}

Object与Function的关系

JavaScript中所有对象(除了Object.prototype)都是Object的实例
FunctionObject互为对方的实例

1
2
3
4
5
console.log(Function instanceof Function); //true
console.log(Function instanceof Object); //true
console.log(Object instanceof Function); //true
console.log(Object instanceof Object); //true
console.log(Object.prototype instanceof Object); //false

原型链属性搜索规则

就近原则(屏蔽原则):通过对象.属性访问属性时,首先会查找自身是否含有该属性,如果没有,会查找其原型对象是否含有该属性,如果有直接返回该属性的值,如果没有就会沿着原型链继续向上查找,直到找到该属性。
如果都没有,返回undefined报错(函数)。