开发者

Calling nested function when function name is passed as a string

I'm trying to access a nested function by passing the function name in as a string and then calling it. Eg, see this pos开发者_开发百科t

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

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

However it doesn't work. Error:

window.outer[action] is not a function

How to make this work, or an alternative way of calling a nested function.

The reason for this is that I am trying to hide a bunch of functions that are called by an iframe inside a functions scope.


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

outer("func1");


In that way you are trying to access the "inner" property of the "outer" function (outer.inner) that is not defined. The only way to do that is by using eval:

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

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

But remember eval is evil is some situations so be careful.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜