我一直在玩,并且搜索了一下,但我无法弄清楚这一点。我在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');
我知道这个例子看起来很傻但我想保持简单。有什么想法吗?
答案 0 :(得分: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');