原型与原型链
-
所有函数都有一个特别的属性:
-
prototype
: 显式原型属性
-
-
所有实例对象都有一个特别的属性:
-
__proto__
: 隐式原型属性
-
-
显式原型与隐式原型的关系
- 函数的prototype: 定义函数时被自动赋值, 值默认为{}, 即用为原型对象
- 实例对象的proto: 在创建实例对象时被自动添加, 并赋值为构造函数的prototype值
- 原型对象即为当前实例对象的父对象
-
原型链
- 所有的实例对象都有proto属性, 它指向的就是原型对象
- 这样通过proto属性就形成了一个链的结构---->原型链
- 当查找对象内部的属性/方法时, js引擎自动沿着这个原型链查找
- 当给对象属性赋值时不会使用原型链, 而只是在当前对象中进行操作
特殊情况的几条总结:
1.Object并不是原型链顶层,Object.prototype才是原型链的顶层,有:Object.prototype._proto_ = null
2.所有函数都是Function的实例(包括Function),有:Function.prototype = Function._proto_
3.所有对象都是Object的实例(包括原型对象),有:Function.prototype._proto_ = Object.prototype