Javascript 打印给定对象的原型链的函数

Javascript 打印给定对象的原型链的函数,javascript,Javascript,有时我会迷失在JavaScript对象的prototype链中,因此我希望有一个函数能够以友好的方式打印给定对象的原型链 我正在使用Node.js function getPrototypeChain(obj) { .... } var detail = getPrototypeChain(myobject) console.log(JSON.stringify(detail)) 您可以使用以下内容: function printPrototype(obj, i) { var n

有时我会迷失在JavaScript对象的
prototype
链中,因此我希望有一个函数能够以友好的方式打印给定对象的原型链

我正在使用Node.js

function getPrototypeChain(obj) {
   ....
}
var detail = getPrototypeChain(myobject)
console.log(JSON.stringify(detail))

您可以使用以下内容:

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);
        }
    }
}

这样说吧:

printPrototype(myObj);

它可能需要一些修改以满足您的确切需要。在node中,您可能还需要一些额外的保护(我在Chrome中测试过,所以我只需要在递归之前防止“obj”未定义)。

此函数清楚地显示了任何对象的原型链:

函数tracePrototypeChainOf(对象){
var proto=object.constructor.prototype;
var结果=“”;
while(proto){
结果+='->'+proto.constructor.name;
proto=Object.getPrototypeOf(proto)
}
返回结果;
}
var trace=tracePrototypeChainOf(document.body)
警报(跟踪)
函数原型链(o){
var链=[];
(函数protoChainImpl(o){
如果(o==null){
返回;
}
var proto=Object.getPrototypeOf(o);
if(proto){
push(proto.hasOwnProperty('constructor')?proto.constructor.name:'undefined');
返回protoChainImpl(proto);
}
})(o) );
返回链;
}
类ExampleParent{}
类示例扩展了ExampleParent{}
document.write(
'function(){}:',protoChain(function(){}),
“
”, “[]:”,原链([]), “
”, “示例:”,原型链(新示例()),
);
也许是题外话,你可以使用这个工具以图形化的方式可视化原型链:你有没有尝试过jetbrains phpstorm和nodejs插件?@VladNikitin,没有,你认为它在这里可以如何使用?不确定这会满足你的需要,但有了这个工具,你可以设置断点并作为结果观察变量,因此,您的变量将显示在舒适的gui中(包括原型)