从原型到原型链
前置概念
1.JavaScript分为函数对象和普通对象,每个对象都有__proto__属性,但是只有函数对象才有prototype属性。
2.Object、Function都是js内置的函数,其他还有Array、RegExp、Date、Boolean、Number、String
3.JavaScript所有数据都可以以对象形式表现,用构造函数方法使得Number、Boolean、String变成对象。
公式
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
图示
每个实例对象( object )都有一个私有属性(称之为
__proto__)指向它的构造函数的原型对象(prototype )。该原型对象也有一个自己的原型对象(__proto__) ,层层向上直到一个对象的原型对象为 null。根据定义,null 没有原型,并作为这个原型链中的最后一个环节。