答案 0 :(得分:1)
我相信你必须对字符串进行一些解析才能获得你正在寻找的全部功能。
你可以玩的体面的图书馆是http://mathjs.org/docs/expressions/parsing.html
答案 1 :(得分:0)
这称为字符串解析。实际上,它正是Web浏览器如何获取JavaScript代码并使计算机执行某些操作。您只需要将数学表达式转换为可以评估的某种形式。您无需将其转换为JavaScript。您可以手动解析或使用库来帮助您。我建议你进一步研究字符串解析。
答案 2 :(得分:0)
使用JavaScript Function Constructor。
例如:
var square = Function("x", "return Math.pow(x,2)");
square(2); // 4
生成动态功能
您对generate_f
功能有正确的想法。您只需使用Function构造函数将字符串输入转换为可以调用的函数。
function generate_f(expression){
// use Function constructor
// to build a new function
// from the 'expression' string argument
var customFunction = Function("x", "return " + expression);
return customFunction;
}
var myFunction = generate_f("Math.pow(x,3) + 4;");
myFunction(2); // 12
<强>参数强>
您将注意到在上面的示例中,Function构造函数用于创建具有单个参数x
的函数。如果要构建一个接受更多参数的函数,可以使用逗号分隔的列表或每个参数一个字符串。
示例:
// function arguments defined using a comma-delimited list
var sum = Function("x, y, z", " return x + y + z; ");
// function arguments defined using one string per argument
var add = Function("a", "b", " return a + b; ");
var i = sum(1, 2, 3); // 6
add(i, 1); // 7
如果要生成一个不接受任何参数的函数,只需提供函数体表达式。
var functionBody = " return 'This function has no arguments.'; ";
var noArgs = Function(functionBody);
noArgs(); // This function has no arguments.
备注强>
Function构造函数的任何前导参数都是生成函数的参数。 Function构造函数的最后一个参数始终是函数体。
使用Function构造函数时,请记住始终键入大写字母F:
// function constructor (returns a new function)
var myFunction = Function(functionArgument, functionBody);
// function declaration (declares a function)
myFunction = function(){ /* expression */ };
generate_f
函数可以这样重写:function generate_f(){
var args = Array.prototype.slice.call(arguments);
var nArguments = args.length;
var functionBody;
if(nArguments == 1){ // build function with no arguments (function body only)
functionBody = args[0];
return Function(functionBody);
}else if(nArguments > 1){ // build function that accepts arguments
functionBody = args.pop(); // remove last argument (the function body)
// form a comma-delimited list
// from the remaining arguments (the leading arguments)
var functionParameters = args.join(',');
return Function(functionParameters, functionBody);
}
return false;
}
然后您可以使用generate_f
来构建每个示例中的函数:
var square = generate_f("x", " return Math.pow(x,2); ");
var myFunction = generate_f("x", " return Math.pow(x,3) + 4; ");
var sum = generate_f("x, y, z", " return x + y + z; ");
var add = generate_f("a", "b", " return a + b; ");
var noArgs = generate_f(" return 'This function has no arguments.'; ");