访问JavaScript内存中的对象

时间:2014-10-01 13:00:51

标签: javascript v8 ecmascript-harmony

是否可以从代码中访问JS内存中对象?是否有可用的内部存储器检查器?我可以从代码中列出具有给定原型(或类型)的对象吗?

// EXAMPLE
function Kitten(name) { this.name = name; }
var kitten = new Kitten('furry');
// ...
// Any features like this?
var kittens = ListObjectsOfType(Kitten);
// Or this?
var kittens2 = ListObjectsWithPrototype(kitten.prototype);

我主要对Google的V8实施或ES6(Harmony)规范感兴趣。 (我也很欣赏其他技术。)

1 个答案:

答案 0 :(得分:0)

您可以为此创建一个功能。类似的东西:

function ListObjectsOfType(type) {
    var result = [];
    for( var w in window ) {
        var val = window[w];
        if( val instanceof type )
            result.push(val);
    }
    return result;
}

如果您从Chrome控制台调用此功能,则可以清楚地检查/折叠生成的对象。 您可以将其扩展为遍历所有窗口变量(但您希望跳过默认值)。 我认为根据定义,不可能检查,例如以下内容:

function SomeObj() {
    var b = new Kitten('kitty');
}
new SomeObj();

我希望内存堆有这个obj,但它不会通过JS可用/可检测到。