评估JavaScript语句中的一个特定函数

时间:2013-05-01 18:03:40

标签: javascript function

我试图通过评估表达式中的一个特定函数调用来模仿JavaScript中的延迟评估,同时将其他函数保留为原样。是否可以在不评估其他函数的情况下评估表达式中的一个函数(以便表达式中的所有其他函数调用保持原样)?

这是我正在尝试实现的功能:

function evaluateSpecificFunction(theExpression, functionsToEvaluate){
    //Evaluate one specific function in the expression, and return the new expression, with one specific function being evaluated
}

例如:

evaluateSpecificFunction("addTwoNumbers(1, 2) + getGreatestPrimeFactor(10)", addTwoNumbers);
//This should return "3 + getGreatestPrimeFactor(10)", since only one of the functions is being evaluated

evaluateSpecificFunction("addTwoNumbers(1, 2) + getGreatestPrimeFactor(10)", getGreatestPrimeFactor);
//This should return "addTwoNumbers(1, 2) + 5";

1 个答案:

答案 0 :(得分:3)

你可以做的是玩replace和正则表达式:

function getGreatestPrimeFactor(n) {
  return n*2;
}

function transform(s, f) {
  return s.replace(new RegExp(f+"\\(([^\\)]*)\\)", "g"), function(m, args) {
    return window[f].apply(null, args.split(',').map(function(v){
       return parseFloat(v)
    }));
  });
}


var result = transform(
    "addTwoNumbers(1, 2) + getGreatestPrimeFactor(10)",
    "getGreatestPrimeFactor"
);

此示例假设您只处理数字参数。

Demonstration (open the console)

当然,这段代码主要表明了这个想法,例如,您应该将函数存储在专用对象中,而不是全局上下文(window)。

编辑:新版本可以处理多个替换。