ローカル変数の一覧を取得
Posted feedbacks - JavaScript
関数のソースを解析して、変数名を抽出し、evalで値を求めています。
ソース解析処理がすごく適当なので、一つのvarに複数の変数が定義されている場合に対応していないです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | Function.prototype.listLocalVariableNames = function() {
var regexp = /var\s+(\w+)/g;
var source = this.toString();
var match = null;
var variables = [];
while(match = regexp.exec(source)) {
variables.push(match[1]);
}
return variables;
}
Array.prototype.toHash= function(iter) {
var hash = {};
for(var i=0; i<this.length; i++) {
try {
hash[this[i]] = iter(this[i]);
} catch(e) {
// エラーはパス
}
}
return hash;
};
function func() {
var x = 1;
var y = "hello";
return arguments.callee.listLocalVariableNames().toHash(function(p) {
return eval(p);
});
}
var variablesMap = func();
for(var prop in variablesMap) {
alert(prop + " => " + variablesMap[prop]);
}
|


にしお
#3391()
Rating0/0=0.00
Pythonで表現すると、下のコードの???部分を埋めることになります。
>>> def foo(): x = 1 y = "hello" ??? return result >>> foo() {'y': 'hello', 'x': 1}[ reply ]