2014-10-01 61 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