JDo*_*ong 1 javascript eval lvalue
我无法重新分配功能.我想分配一个先前定义的函数,drawScene一个不同的方法.
function fSwap(funcName, code) {
eval(funcName) = eval(code);
}
fSwap("drawScene", "function drawScene() { /* Do something */ }");
Run Code Online (Sandbox Code Playgroud)
我觉得这应该工作,但由于某种原因eval(funcName)不是左值,它返回错误ReferenceError: invalid assignment left-hand side.更令人费解的是:
var a = function test() {return 0;};
alert(a === eval("a"));
eval("a") = function test() {return 1;};
Run Code Online (Sandbox Code Playgroud)
提供警报,true但不允许我分配给该功能a.
我唯一的猜测是,出于安全原因,eval()不返回左值.如果是这样,我如何实现fSwap(),以便它接收两个字符串并将代码分配给给定的函数名?
您应该使用回调函数.你可以这样做:
function fSwap(funcName, callback) {
window[funcName] = callback;
}
fSwap("drawScene", function drawScene() { /* Do something */ });
Run Code Online (Sandbox Code Playgroud)
要直接回答您的问题,出现的问题是您为评估的代码片段分配了一个值.那不行.会有什么工作:
function fSwap(funcName, code) {
eval(funcName+' = '+code);
}
Run Code Online (Sandbox Code Playgroud)
但请不要这样做.另一种方式,使用回调函数,更清洁.几乎总是最好不要在eval不是绝对需要的时候使用它.(根据你的评论,显然绝对需要使用字符串,所以请使用这段代码).
| 归档时间: |
|
| 查看次数: |
1124 次 |
| 最近记录: |