2012-03-02 8 views
0

以下のスクリプトは、次のようにして存在をテストしようとしています:Utility.Method.PageInit();関数の存在をテストする(動的に参照される関数)

イベントオブジェクトのように、ページオブジェクトが動的に入ってくるので、私は実際にそれらがどのようになるかわからないので、動的関数の存在をテストする必要があります。

var key = page.attr('id'); 
var funcToCall = key + '.Method.' + event; 

//check if function exists, if it doesn't return, (guard statement) 
if (typeof (eval(funcToCall)) != 'function') { return; } 

問題は、実際にはevalがそれを呼び出していて、エラーが「関数がblahblahに存在しません」ということです。

どうすればエラーを表示せずにその存在をテストできますか?

答えて

0

ああ、私はそう、オブジェクト内のその機能するので、オブジェクトの内部あなたがダウンして徐々にトップレベルからテストする必要があり、あったか簡単に実現しなかった、それを考え出した:

if (typeof (eval(key)) != 'object' || typeof (eval(key + '.Method')) != 'object' || (typeof (eval(funcToCall)) != 'function')) { return; } 
0
を安全のメンバーのためにチェックすることができ、論理的に真である何(及び undefinedを返すメンバーが存在しない場合)ので、全く evalを必要としない

何かがこの作品

if (!window[key] || (typeof window[key].Method) != "function") return; 

である可能性があります。

xnullまたはundefinedですが、これらの特別な値は、論理的に偽であるので、上記のコードは、例外を発生させることがないときx.Methodをチェックするとエラーになります。

メソッド名は、たとえば...あなたはまだevalを必要とせずに、同等のインデックスアクセスアプローチを使用することができる動的な場合:

m = "Method" 
if (!window[key] || (typeof window[key][m]) != "function") return; 
関連する問題