原型链地图

120 阅读1分钟

原型链长度排序

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宇宙

f3207e050a8eae11d31593fbca49e44.png