在JavaScript中调用一个字符串的函数,并保持在范围内
问题描述:
我一直在玩弄和搜索一下,但我无法弄清楚这一点。我需要通过eval调用JavaScript对象中的伪私有函数(因为函数的名称是动态构建的)。但是,该函数被全局范围隐藏,并且我无法弄清楚如何使用eval()引用它。在JavaScript中调用一个字符串的函数,并保持在范围内
例:
var myObject = function(){
var privateFunctionNeedsToBeCalled = function() {
alert('gets here');
};
return {
publicFunction: function(firstPart, SecondPart) {
var functionCallString = firstPart + secondPart + '()';
eval(functionCallString);
}
}
}();
myObject.publicFunction('privateFunctionNeeds', 'ToBeCalled');
我知道的例子看起来很傻,但我想保持简单。有任何想法吗?
答
传递给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-10 22:59:19
在你的第二个解决方案中,我建议你使用一个空对象,而不是''function'变量的数组,例如。 'var functions = {};' – CMS 2009-12-10 23:00:52
@CMS:已更改。 – moonshadow 2009-12-10 23:16:08