0

我一直在玩并搜索了一下,但我无法弄清楚。我在需要通过 eval 调用的 JavaScript 对象中有一个伪私有函数(因为函数的名称是动态构建的)。但是,该函数被一个闭包隐藏在全局范围内,我无法弄清楚如何使用 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');

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

4

1 回答 1

5

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

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

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

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

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

myObject.publicFunction('privateFunctionNeeds', 'ToBeCalled');
于 2009-12-10T22:54:33.650 回答