2011-07-12 6 views
1

グローバルコンテキストのプロパティが存在するかどうかを確認する方法を知っています。任意のバリエーションJavascript関数/クラスを呼び出す前にファンクション/クラスが存在するかどうかを調べる

if (typeof myFunction != 'undefined'){...} 

ただし、機能の名前がわからない場合はどうすればよいですか?私は世界的に、私はこの

if (typeof this['myFunction'] != 'undefined'){...} 

を行うことができると思うが、私は私が持っているように、この

function load(functionName){ 
    if (typeof GLOBALCONTEX[functionName] != 'undefined'){ 
    GLOBALCONTEX[functionName](arg1 , arg2 , ...); 
    } 
} 

ような関数で私がキャッチ/しようと使用しないことを行うには方法がわかりませんそれは遅いと聞いた。

答えて

6

ブラウザで作業している場合、windowGLOBALCONTEXを代用。例:

function load(functionName){ 
    if (typeof window[functionName] != 'undefined'){ 
    window[functionName](arg1 , arg2 , ...); 
    } 
} 
+0

質問は文字列としてそれが名前だ使用してグローバル関数を呼び出すことについて、それはだされ、これは必ずしもそうではありません指摘したように単に関数をオブジェクトとして呼び出すのと同じように「良い」とは限りません。 – katspaugh

+0

@katspaugh:だから私はそれを削除した。 ;) – Shaz

+0

私は答えとしてこれを受け入れるでしょう。クイック質問、ブラウザを介してJavaScriptのビューの何パーセントがダウンしていますか? 99%? 50%?もっと、少ない? – puk

0

ブラウザでは、グローバルオブジェクトはwindow[docs]です。別のJavaScript実行環境(Node.jsなど)を使用している場合は、ドキュメントを参照してグローバルオブジェクトへの名前/参照を確認してください。

もちろん、このようなテストは、グローバルスコープで定義された関数に対してのみ機能し、それ以上のスコープでは機能しません。したがって、そのような関数が利用可能であり(アクセス可能であるかもしれないが)、グローバルスコープにはない。

0

グローバルコンテキストはウィンドウです。すべてのオブジェクトが添付されています。

function load(functionName){ 
     if (typeof window[functionName] != 'undefined'){ 
     window[functionName](arg1 , arg2 , ...); 
     } 
    } 
+0

(それはおそらく時間の99%ですが)少数の人々はそれが理由です – puk

関連する問題