特定のオブジェクトのプロパティを一覧表示して実行する

デバッグの都合、JavaScriptから直接プロパティを参照したかった

XHR 関係のレスポンスをみたいんだけど、事情によりデバッグがしづらいのでプロパティを全部アラートするようなものをかいた。以下コードコメントつき。

// XMLHttpRequest は送信済みで、失敗時のパラメータが欲しい。
failure: function (res){
  // 要素を列挙
  for (var prop in res){
    // これはいらないかもしれないけど、いちおう
    prop = prop.toString();
    // evil だけど結局 eval しか思いつかなかった
    var result = eval('res.' + prop);
    // 関数の場合とりあえず実行させることにした
    // 例外を握りつぶさないと処理が止まるので try catch してる
    try{
      // 型の確認
      if (typeof result === "function"){
        // とりあえず引数なしで実行だけさせてみる
        result = eval('res.' + prop + '()');
      }
    } catch(e){
       result = e;
    }
    // 表示
    alert(prop + ': ' + result);
  }
}

文字列を組み立てたらどうすればプロパティアクセスできるかわかんなかったけど、そういうのは eval させておいた。あとは関数処理させて落ちる場合があるので try catch で握りつぶした。

まあ

わりとバッドノウハウに近い気がするけど、なりふりかまわず必要になることはある。

追記

コメント欄より

id;kjirouu
eval('res.' + prop) は
res[prop] では動きませんでしょうか?

うごいたよ!!!!そりゃObjectならそのままプロパティにアクセスすればいいんや!!!!ありがとうございます。

広告を非表示にする