2010-11-25 16 views
5

関数名を文字列として渡して呼び出して入れ子関数にアクセスしようとしています。例:this投稿関数名を文字列として渡したときにネストされた関数を呼び出す

function outer(action){ 
    window["outer"][action](); 

    function inner(){ 
     alert("hello"); 
    } 
} 
outer("inner"); 

ただし、動作しません。エラー:

window.outer[action] is not a function 

入れ子関数を呼び出す方法、または入れ子になった関数を呼び出す方法。

これは、関数スコープ内でiframeによって呼び出される関数の束を隠そうとしているためです。

答えて

6
function outer(action){ 
    var inner = { 
    func1: function() {}, 
    func2: function() {}, 
    func3: function() {}, 
    // ... 
    } 
    inner[action](); 
} 

outer("func1"); 
+1

ありがとうございました。私は助けることができる嬉しい – SystemicPlural

+0

の治療を働く:) – galambalazs

1

このようにして、定義されていない「外側」関数(outer.inner)の「内部」プロパティにアクセスしようとしています。それを行うための唯一の方法は、evalのを使用することです:

function outer(action){ 
    eval(action+"()"); 

    function inner(){ 
     alert("hello"); 
    } 
} 
outer("inner"); 

しかし、evalは悪であることを覚えているいくつかの状況は非常に注意が必要です。

+0

eval。 urgggh。ガランバラズは解決策を思いついた。 – SystemicPlural

+1

あなたがeval trust meを使うと死ぬことはありません:) – mck89

+1

うん、あなたは死ぬことはないでしょう、Crockfordはあなたを殺さないでしょう。時間の終わりまであなたを拷問します:P –