构造函数、实例原型、对象三者的关系
- 构造函数创建对象
- 构造函数的prototype属性指向一个对象(实例原型)
- 每个JavaScript对象都有一个__proto__属性指向该对象的原型(实例原型)
- 每个原型都有一个constructor 属性指向关联的构造函数
原型的原型
- 原型对象就是通过 Object 构造函数生成的
Function.__proto__=== Function.prototypeObject.prototype.__proto__的值为 null (没有原型)
原型链
- 关联的原型组成的链状结构就是原型链
继承
- 当读取实例的属性时,如果找不到,就会查找与对象关联的原型中的属性,如果还查不到,就去找原型的原型,一直找到最顶层为止。
- 当获取 person.constructor 时,其实 person 中并没有 constructor 属性,当不能读取到constructor 属性时,会从 person 的原型也就是 Person.prototype 中读取,正好原型中有该属性
参考文章:JavaScript深入之从原型到原型链