通过JavaScript中的字符串调用函数并保持在范围内

rr.*_*rr. 0 javascript scope eval private function

我一直在玩,并且搜索了一下,但我无法弄清楚这一点.我在JavaScript对象中有一个伪私有函数,需要通过eval调用(因为函数的名称是动态构建的).但是,函数被闭包隐藏在全局范围内,我无法弄清楚如何使用eval()来引用它.

例如:

var myObject = function(){
    var privateFunctionNeedsToBeCalled = function() {
        alert('gets here');
    };

    return {
        publicFunction: function(firstPart, SecondPart) {
            var functionCallString = firstPart + secondPart + '()';
            eval(functionCallString);
        }
    }
}();

myObject.publicFunction('privateFunctionNeeds', 'ToBeCalled');
Run Code Online (Sandbox Code Playgroud)

我知道这个例子看起来很傻但我想保持简单.有任何想法吗?

moo*_*dow 5

传递给的字符串eval()在eval()的范围内进行计算,所以你可以这样做

    return {
        publicFunction: function(firstPart, SecondPart) {
            var captured_privateFunctionNeedsToBeCalled = privateFunctionNeedsToBeCalled;
            var functionCallString = 'captured_' + firstPart + secondPart + '()';
            eval(functionCallString);
        }
    }
Run Code Online (Sandbox Code Playgroud)

但是,更好的解决方案是完全避免使用eval():

var myObject = function(){
    var functions = {};
    functions['privateFunctionNeedsToBeCalled'] = function() {
        alert('gets here');
    };

    return {
        publicFunction: function(firstPart, secondPart) {
            functions[firstPart+secondPart]();
        }
    }
}();

myObject.publicFunction('privateFunctionNeeds', 'ToBeCalled');
Run Code Online (Sandbox Code Playgroud)