2014-10-01 34 views
0

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

// 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

JavaScript的哪个实现?无论如何都没有标准的方法 – thefourtheye 2014-10-01 13:02:25

+0

我专注于V8(Chrome,Node)。我对当前可用的技术感兴趣,并且如果稍后将实现任何ES6标准 – 2014-10-01 13:05:35

回答

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有/可检测。

+0

是的,它列出了'window'(即全局变量)的属性,但它远不是内存检查器。这里没有列出局部变量('function(){var k = new Kitten('meow')}')和成员变量。 – 2014-10-01 13:11:36

+0

同意。 Chrome Devtools具有查看内存及其对象的功能,但据我所知,您无法使用函数进行运行时检查。这个例子可以通过检查每个引用的方式来扩展,但是我认为根据定义,一些对象是不可访问的,因为它们位于本地范围内。 – EricG 2014-10-01 13:15:10