2016-11-15 7 views
0

文字列に名前があるときに関数を呼び出す必要があるコードがあります。たとえば、次のようにウィンドウ関数ポインタがJavaScriptで機能しない

var util = { 
    exByName: function(name) { 
     window[name](arguments); 
    } 
}; 
util.exByName("console.log", "blah"); 

私はこれを実行すると、エラーは:私はブラウザ(オペラ)でこれを実行したときに、しかし 「キャッチされない例外TypeErrorウィンドウ[名]は関数ではありません」:

window["console.log"]("blah"); 

正常に動作します。 誰かがこれを手伝ってくれますか?あなたが使用する必要が他のブラウザとconsole.logのような名前空間の機能を持つ

+1

そのようなネストされたプロパティを参照できるためです。そして私はクロムがそれを参照して動作しないことを知っています。 – epascarello

+0

あなたが呼び出す機能が実際にウィンドウスコープにあることを確認してください。 'window.onload'や' $(function(){...}) 'を使った場合は、ウィンドウスコープにはありません。 –

+0

@ミサズ - もちろんです。ウィンドウスコープにない場合は、ウィンドウからアクセスすることはできません。 –

答えて

0

window["console"]["log"]("blah") 

詳細についてthis entryを参照してください。

0

括弧内のドット表記を使用して、ネストされたオブジェクトのプロパティにアクセスすることはできません。

代わりに、別のブラケットを介して異なる入れ子レベルにアクセス:

window["console"]["log"]("foo");

More about object property accessors on MDN

+0

コメントありがとうございます! –

関連する問題