1.js公式
任意函数.__proto__===其构造函数.prototype
比如:
let a=[]
a.__proto__===Array.prototype
true
let a={}
a.__proto__===Object.prototype
true
2.根公理
Object.prototype是所有对象的直接或间接原型
比如:
a.__proto__.__proto__===Object.prototype
true
3.函数公理
所有函数都是由Function构造的
函数有Array,Object,Function
任意函数.__proto__===Function.prototype
比如:
Array.__proto__===Function.prototype
true
Object.toString.__proto__===Function.prototype
true
1.乱一
xxx的原型=.__proto__
比如:
bject.__proto__===Function.prototype
true
2.乱二
矛盾点:[1,2,3]的原型是其构造函数.prototype,即Array.prototype
又说Object.prototype是所有对象的原型
原理:原型分为直接原型和间接原型
Array.prototype是数组的直接原型
Object.prototype是数组的间接原型
即普通对象是直接原型,数组、函数是间接原型
a.__proto__.__proto__===Object.prototype
true
3.乱三
Object.prototype是不是根对象
想一下:Object是个函数,函数都是由Function构造的,
但是我们不能说Function构造了Object.prototype,
因为只是构造了prototype对应的地址,没有构造出地址对应的对象
画一下js的顺序
总结
构造函数
是用于构造对象的函数,
会预先存好对象的原型
new的时候直接把对象的__p指向原型
对象
所有对象都直接或者间接指向根对象
如果对象要分类,就在原型链上加一环
用构造函数可以