原型与原型链
为了共用一些方法,JS 把 toString 和 valueOf 放在一个对象里(暂且叫做公用属性组成的对象)
然后让每一个对象的 __proto__ 存储这个「公用属性组成的对象」的地址。
__proto__的读取器(getter)暴露了一个对象的内部 [[Prototype]]
。对于使用对象字面量创建的对象,这个值是 Object.prototype
。对于使用数组字面量创建的对象,这个值是 Array.prototype
。对于functions,这个值是Function.prototype
。对于使用 new fun 创建的对象,其中fun是由js提供的内建构造器函数之一(Array
, Boolean
, Date
, Number
, Object
, String
等等),这个值总是fun.prototype。对于用js定义的其他js构造器函数创建的对象,这个值就是该构造器函数的prototype属性
可以打得出以下结论
var 对象 = new 函数()
对象.__proto__=== 对象的构造函数.prototype
又有以下推论
var number = new Number()
number.__proto__ = Number.prototype
Number.__proto__ = Function.prototype // 因为 Number 是 Function 的实例
var object = new Object()
object.__proto__ = Object.prototype
Object.__proto__ = Function.prototype // 因为 Object 是 Function 的实例
var function = new Function()
function.__proto__ = Function.prototype
Function.__proto__ == Function.prototye // 因为 Function 是 Function 的实例