js原型链及其完整结构图
- 原型链
- 完整原型链
1. 函数与 Function 的关系
函数就是 Function 的实例. 即 Function 就是函数的构造函数.
实例对象有一个继承的 constructor 属性, 该方法指向就是构造函数.
自己定义一个函数( 任意的函数 ), 可以知道函数的 constructor 就是 Function
得到结论 函数就是 Function 的实例.
Function 也是函数, 那么有什么结论呢?
Function 就是 Function 的实例. 即 自己就是自己的实例.2. Object 与 Function
-> Object 与 Function 的关系
Object 是 函数, 因此在 Function 中, 它就是实例对象. 因此就构成一个三角形.可以使用 __proto__ 来访问对象的原型对象.
在讨论 .prototype 的时候是通过 函数 访问原型
在讨论 .__proto__ 的时候是通过 实例对象 访问原型
在实际构建对象的时候, 扩展实例成员, 一般都使用 原型增加方法的形式( 原型继承 ).
一般在使用的时候利用 构造函数.prototype 来添加, 不要使用 实例对象.__proto__ 来添加.原型继承的整个关系( 原型链 )
可以知道所有的对象都有原型, 一步一步往上走, 都会汇集到 Object.prototype 中
Object.prototype 是*的对象.Function.prototype 继承自谁?
任意一个函数继承自 Function.prototype. 可以看做是 Function 的实例.
而 Function.prototype 又是继承自 Object.prototype(原型).