原型链的结构
- 每一个对象都是由构造函数创建出来的。
- 每一个构造函数都有对应的原型对象。
- 原型对象也是一个对象,所以原型对象也是由构造函数创建出来的。
- 以上,形成原型链。
- 原型链的顶端是
Object.prototype
,Object.prototype
构造出空函数function () {}
,空函数构造出Object
与Function
Object.prototype
的构造函数是Object
Object.prototype.__proto__ == null
- 构造函数的也是一个对象,它的构造函数是
Function
Function
也是一个对象,它的构造函数是它自己Function
Function
的原型对象是空函数function () {}
- 空函数
function () {}
的原型对象是Object.prototype
Objcet
的构造函数是Function
Object.__proto__
是空函数function () {}
Object与Function的关系
JavaScript中所有对象(除了Object.prototype
)都是Object
的实例Function
和Object
互为对方的实例12345console.log(Function instanceof Function); //trueconsole.log(Function instanceof Object); //trueconsole.log(Object instanceof Function); //trueconsole.log(Object instanceof Object); //trueconsole.log(Object.prototype instanceof Object); //false
原型链属性搜索规则
就近原则(屏蔽原则):通过对象.属性
访问属性时,首先会查找自身是否含有该属性,如果没有,会查找其原型对象是否含有该属性,如果有直接返回该属性的值,如果没有就会沿着原型链继续向上查找,直到找到该属性。
如果都没有,返回undefined或报错(函数)。