原型链的结构

- 每一个对象都是由构造函数创建出来的。
- 每一个构造函数都有对应的原型对象。
- 原型对象也是一个对象,所以原型对象也是由构造函数创建出来的。
- 以上,形成原型链。
- 原型链的顶端是
Object.prototype,Object.prototype构造出空函数function () {},空函数构造出Object与Function Object.prototype的构造函数是ObjectObject.prototype.__proto__ == null- 构造函数的也是一个对象,它的构造函数是
Function Function也是一个对象,它的构造函数是它自己FunctionFunction的原型对象是空函数function () {}- 空函数
function () {}的原型对象是Object.prototype Objcet的构造函数是FunctionObject.__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或报错(函数)。