gpt4 book ai didi

javascript - 在 JavaScript 中通过字符串调用函数并保持在作用域内

转载 作者:行者123 更新时间:2023-11-28 14:05:13 24 4
gpt4 key购买 nike

我一直在尝试和搜索,但我无法弄清楚这一点。我在 JavaScript 对象中有一个伪私有(private)函数,需要通过 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');

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

最佳答案

传递给 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');

关于javascript - 在 JavaScript 中通过字符串调用函数并保持在作用域内,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1884637/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com