A function to print prototype chain for a given object

前端 未结 2 812
青春惊慌失措
青春惊慌失措 2021-02-05 23:20

Sometimes I get lost in prototype chain of my JavaScript objects, so I would like to have a function that would print in a friendly way the prototype chain of a giv

相关标签:
2条回答
  • 2021-02-05 23:53

    You could use something like the following:

    function printPrototype(obj, i) {
        var n = Number(i || 0);
        var indent = Array(2 + n).join("-");
    
        for(var key in obj) {
            if(obj.hasOwnProperty(key)) {
                console.log(indent, key, ": ", obj[key]);
            }
        }
    
        if(obj) {
            if(Object.getPrototypeOf) {
                printPrototype(Object.getPrototypeOf(obj), n + 1);
            } else if(obj.__proto__) {
                printPrototype(obj.__proto__, n + 1);
            }
        }
    }
    

    http://jsfiddle.net/5fv1tv1x/1/

    Call it like so:

    printPrototype(myObj);
    

    It may require some modification to fit your exact needs. In node, you may also need some extra guards ( I tested in Chrome so I only needed to guard against 'obj' being undefined before recursing).

    0 讨论(0)
  • 2021-02-06 00:01

    This function shows prototype chain of any object clearly:

    function tracePrototypeChainOf(object) {
    
        var proto = object.constructor.prototype;
        var result = '';
    
        while (proto) {
            result += ' -> ' + proto.constructor.name;
            proto = Object.getPrototypeOf(proto)
        }
    
        return result;
    }
    
    var trace = tracePrototypeChainOf(document.body)
    alert(trace);

    tracePrototypeChainOf(document.body) returns "-> HTMLBodyElement -> HTMLElement -> Element -> Node -> EventTarget -> Object"

    0 讨论(0)
提交回复
热议问题