原型
首先,我们来讲讲浏览器的初始状态,就是在无代码的情况下,浏览器所分配到的内存的使用情况,首先浏览器会创建一个全局对象global,而在这个全局对象global内含有许多的全局函数,例如global.parseInt、global.parseFloat、global.Number、global.String、global.Boolean、global.Object等等,函数也是对象的一种,因此也会具有属性,其中一种属性为prototype,这个属性的含义便是函数的原型对象。
另一方面,通过这些函数如Number()、String()、Object()所构建出来的对象,都会拥有着一个属性proto,这个属性的value指向创建该对象的构造函数的原型对象,如:
var a=new Number()
a.__proto __===Number.prototype
var s=String()
s.__proto __ === String.prototype
因为 Function 是 Object 的构造函数, 由此我们得到:
var o = new Object()
o.__proto __ === Function.prototype 或:
var b = {}
o.__proto __ === Function.prototype
因为函数也是一种对象,由此我们得到:
对象.__proto __ === 对象的构造函数.prototype
Function.__proto __ === Function.prototype
Function.__proto __.__proto __ === Object.prototype
原型链
除函数Object以外的其他函数的原型对象在最后均会通过proto指向函数的原型对象,即Object.prototype
Function.prototype.__proto __===Object.prototype
函数Object的原型对象最后会通过proto指向null
Object.prototype.__proto __ === null