2

enumerateScope()現在のスコープのすべてのプロパティ (キー) を一覧表示する関数を作成することは可能ですか?

<script>
var a = "foo";
enumerateScope(); //all properties of global window object including 'a'
</script>

これはとても簡単ですが、これはどうですか?

<script>
(function(){
   var b = "bar";
   enumerateScope(); //either only 'b' or all properties of global window object including 'b'
})();
</script>

最後のケースは私が興味を持っているものです。匿名/クロージャースコープ内のコードを変更したくありません

(function(scope){scope.b = "bar";})(window);

これを達成する方法はありますか?

4

2 に答える 2

2

まあ、これは厳密な意味で不可能ではありません。

bindings = function() {
    var v = String(bindings.caller).match(/\w+/g).join(" ");
    return "('"+v+"'.split(' ').reduce(function($1,$2){try{$1[$2]=eval($2)}finally{return $1}},{}))";
}


vars = (function(){
    var b = "bar";
    var foo = "quux";
    return eval(bindings())
})();

console.log(vars) 
//{
// "b": "bar",
// "foo": "quux"
//}

しかし、おそらくデバッグ目的を除いて、ほとんどの場合、実用的とは言えません。

于 2013-06-28T13:33:32.603 に答える