我在重新分配功能时遇到问题。我想为一个先前定义的函数 drawScene
分配一个不同的方法。
function fSwap(funcName, code) {
eval(funcName) = eval(code);
}
fSwap("drawScene", "function drawScene() { /* Do something */ }");
我觉得这应该可行,但由于某些原因 eval(funcName)
不是左值,它返回错误 ReferenceError: invalid assignment left-hand side
。更令人费解的是:
var a = function test() {return 0;};
alert(a === eval("a"));
eval("a") = function test() {return 1;};
使用 true
给出警告,但不允许我分配给函数 a
。
我唯一的猜测是出于安全原因,eval() 不会返回左值。如果是这样,我如何实现 fSwap() 以便它接收两个字符串并将代码分配给给定的函数名称?
最佳答案
您应该改用回调函数。你可以这样做:
function fSwap(funcName, callback) {
window[funcName] = callback;
}
fSwap("drawScene", function drawScene() { /* Do something */ });
要直接回答您的问题,问题在于您正在为一段已评估的代码分配一个值。那行不通的。什么会起作用:
function fSwap(funcName, code) {
eval(funcName+' = '+code);
}
但请不要这样做。另一种方法,使用回调函数,更简洁。只要不是绝对需要使用 eval
,几乎总是最好不要使用它。 (根据 your comment ,显然绝对需要使用字符串,所以请使用这段代码)。
关于使用 eval 的 Javascript 函数赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21649928/