原型链长度排序
Object.getOwnPropertyNames(window).map(name=>{
let len = 0
let t = window[name]
while (t) {
t = t.__proto__
len++
}
return [len, name]
}).sort((q,w)=>w[0]-q[0])
原型链地图
const allValues = Object.getOwnPropertyNames(window).map(name=>window[name])
const prototypeMap = {}
allValues.filter(v=>typeof v === 'function').map(v=>({
v,
proto: allValues.filter(vv=>vv?.__proto__ === v),
})).sort((q,w)=>q.proto.length-w.proto.length)
.reduce((all,{v:{name}, proto})=>{
if(!all[name]) all[name] = {}
proto.forEach(f=>{
if(!all[f.name]) all[f.name] = {}
prototypeMap[name] = all[name]
all[name][f.name] = all[f.name]
setTimeout(()=>{
delete prototypeMap[f.name]
})
})
return all
},{})
console.log(prototypeMap)
cssom宇宙