参考:https://www.cnblogs.com/loveyaxin/p/11151586.html
1.原型
原型的概念:
每一个javascript对象(除null外)创建的时候,就会与之关联另一个对象,这个对象就是我们所说的原型,每一个对象都会从原型中“继承”属性。
2.原型链
原型链的概念(以下图为例):
每个构造函数Person都有一个prototype属性指向原型对象,同时每个原型对象prototype都有一个属性constructor指向它的构造函数,
每个构造函数Person都可以创造实例化对象person,每个实例化对象都有一个__ proto __ 对象原型指向构造函数的原型对象prototype
原型对象也都有一个__ proto __ 对象原型指向上一级构造函数的prototype原型对象
以此类推,最上层是Object() 对象,再往上就是null
原型链关系图:
![](https://img.haomeiwen.com/i26381799/9ba4d48b702fadb8.png)
原型链查找机制:
当我们使用实例属性的时候,首先先从实例对象上找、找不到到构造函数上找、找不到再到原型对象上找、找不到再通过原型对象的 __ proto __ 找到上父级的原型对象,先找构造函数,再找原型对象,依次类推,找不到就一直沿着__ proto __ 原型往上找
3. 常见重点关系词
1. prototype 原型对象
每个构造函数都有一个prototype属性指向它的原型对象
2. __ proto __ 对象原型(每个对象都有这个属性)
实例对象的__ proto __ 指向构造函数的原型对象
原型对象的__ proto __ 指向上一级构造函数的原型对象
3. constructor 属性
每个原型对象都有一个constructor属性,指向它的构造函数。
网友评论