Доступ к объектам JavaScript в памяти
Можно ли получить доступ к объектам 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 ответ
Вы можете создать функцию для этого. Что-то вроде:
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();
Я ожидаю, что в куче памяти будет этот объект, но он никогда не будет доступен / обнаружен через JS.