2010-11-25 106 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 2010-11-25 14:30:34

+0

很高興我可以幫助:) – galambalazs 2010-11-25 21:06:10

1

通過這種方式,您試圖訪問未定義的「外部」函數(outer.inner)的「內部」屬性。唯一的方法就是使用eval:

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

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

但記住eval是邪惡的,在某些情況下要小心。

相關問題