使用串联构造函数名

Construct the function name with concatenation

本文关键字:构造函数      更新时间:2023-10-13

我如何制作这样的东西:

var string1 = "functionNameBeginning";
var string2 = "functionNameEnding";
element.innerHTML = string1 + string2 //string1 + string2 is name of function to execute

UPD:我想要的是执行名为string1string2()的函数,用户Spencer Wieczorek在他关于eval()函数的评论中完全理解我。此外,我真的找到了一个更好的主意来解决这个问题。由于这是我想在Wordpress网站上处理select input值的方法:

<select name="formula" class="left-input" id="formula">
    <option value="mifflin" selected>Mifflin-St Jeor</option>
    <option value="harris">Harris–Benedict</option>
    <option value="katch">Katch-McArdle</option>
</select>

我已经在我的WP插件中编写了函数:

if ($_POST['formula'] == 'mifflin') {
    return mifflinFormula();
} else if ($_POST['formula'] == 'harris') {
    return harrisFormula();
} else {
    return katchFormula($_POST['fat']);
}

如果在global(window)作用域中声明了function,则可以使用bracket表示法将它们作为windowkey进行访问,就像使用variable作为key 一样

function functionNameBeginning() {
  return 'Hi...';
}
function functionNameEnding() {
  return 'Bye...';
}
var string1 = "functionNameBeginning";
var string2 = "functionNameEnding";
var element = document.body;
element.innerHTML = window[string1]() + window[string2]();

编辑:

若您有一个函数名,它是在连接前两个函数返回的值后形成的,您可以这样做。但我建议您使用您自己的对象,将属性值作为函数。

function functionNameBeginning() {
  return 'Hi';
}
function functionNameEnding() {
  return 'Bye';
}
function HiBye() {
  return 'Hi...Bye executed!';
}
var string1 = "functionNameBeginning";
var string2 = "functionNameEnding";
var element = document.body;
element.innerHTML = window[window[string1]() + window[string2]()]();

您是否试图执行任意函数,或者您可以控制其定义方式?

如果它是任意的,你可能会走上一条危险的道路,因为你需要使用eval来执行它,这总是有风险的。

如果它在你的控制之下,试试这个:

var functions = {
   example_a: function() {
   },
   test_b: function() {
   }
};
functions["example" + "_" + "a"]();