Object
var o = {name:"a"}
在对象中,会把一些共有属性以隐藏属性__proto__
的形式链接到另一个对象,这个公有对象中存储的属性就是所有object拥有的属性,当然这个公有对象也有__proto__
属性,但是它指向null。
用consolel.log可以打印出对象o中的所有属性,包括隐藏属性__proto__
,它指向Object对象。
image.png
再用console.log打印出Object对象,里面的属性就是对象的共有属性,每个对象都可以调用这些属性。
image.png
Number
var n = new Number(1)
与Object不同的是,Number()是一种函数,虽然函数也是一中对象,但是它的__proto__
属性不是直接指向Object的,而是先指向Number对象
image.png
打印Number,Number中也有
__proto__
,此时的__proto__
指向的才是Object。image.png
公式
var 对象 = new 函数()
对象.proto === 对象的构造函数.prototype
// 推论
number.__proto__ = Number.prototype
var object = new Object()
object.__proto__ = Object.prototype
var function = new Function()
function.__proto__ = Function.prototype
// 另外,所有函数都是由 Function 构造出来的,所以
Number.__proto__ = Function.prototype // 因为 Number 是函数,是 Function 的实例
Object.__proto__ = Function.prototype // 因为 Object 是函数,是 Function 的实例
Function.__proto__ == Function.prototye // 因为 Function 是函数,是 Function 的实例!