JavaScript中除了基本类型外的数据类型,都是对象。但是由于其没有 类(class,ES6引入了class)的概念,如何将所有对象联系起来就成了一个问题,于是就有了原型和原型链的概念。
每个实例对象(object )都有一个私有属性(称之为 proto)指向它的原型对象(prototype)。该原型对象也有一个自己的原型对象 ,层层向上直到一个对象的原型对象为 null。根据定义,null 没有原型,并作为这个原型链中的最后一个环节。
事实上 JavaScript 所有数据都可以以对象的形式表现:由于函数是对象,我们可以用构造函数的方法使得 Number、Boolean、String变成对象。
下面以 Number 为例
可以用 var 基本类型 = new 对应基本类型的函数() 的方法创建一个新的函数
var n = new Number() 创建一个 Number 函数,其是一个对象。
var 对象 = new 函数()
对象.proto === 对象的构造函数.prototype
我们已经知道
var n = new Number()
n.proto === Number.prototype //true
那么 Number.proto ?
Number 的原型对象是Function,即 Number 是 Function 的实例
即有
Number.proto === Function.prototype
那么同理
var object = new Object()
object.proto === Object.prototype
Object.proto === Function.prototype
再进一步推断
var function = new Function()
function.proto === Function.prototype
Function.proto === Function.prototype