2010-11-25 22 views
5

Ich versuche auf eine verschachtelte Funktion zuzugreifen, indem ich den Funktionsnamen als String übergebe und ihn dann aufruft. ZB siehe this nachAufruf der verschachtelten Funktion, wenn Funktionsname als String übergeben wird

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

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

Allerdings funktioniert es nicht. Fehler:

window.outer[action] is not a function 

Wie dies funktioniert, oder eine alternative Möglichkeit zum Aufrufen einer verschachtelten Funktion.

Der Grund dafür ist, dass ich versuche, eine Reihe von Funktionen, die von einem iframe aufgerufen werden, in einem Funktionsumfang zu verstecken.

Antwort

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

outer("func1"); 
+1

Danke. Works a treat – SystemicPlural

+0

froh, ich könnte helfen :) – galambalazs

1

Auf diese Weise versuchen Sie, auf die "innere" Eigenschaft der "outer" -Funktion (outer.inner) zuzugreifen, die nicht definiert ist. Der einzige Weg, dies zu tun ist durch die Verwendung von eval:

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

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

Aber denken Sie daran eval Übel ist einige Situationen, so vorsichtig sein.

+0

Eval. Urgggh. Galambalazs haben eine Lösung gefunden. – SystemicPlural

+1

Du wirst nicht sterben, wenn du Eval verwendest, vertrau mir :) – mck89

+1

Yeah du wirst nicht sterben, Crockford wird dich nicht töten, er wird dich nur bis zum Ende der Zeit foltern: P –

Verwandte Themen