我有如下的JS函数
// A simple array where we keep track of things that are filed.
filed = [];
function fileIt(thing) {
// Dynamically call the file method of whatever 'thing' was passed in.
thing.file();
// Mark as filed
filed.push(thing);
}
现在,函数fileIt(thing)
在按以下方式调用时运行良好
fileIt(AuditForm);
但是,当我尝试传递以下变量时,它在第thing.file();
行给出了错误
var formID = obj.id;
fileIt(formID);
变量formID
具有相同的值,即“ AuditForm” 这里出了什么问题。请提出。
答案 0 :(得分:1)
如果obj.id
是字符串AuditForm
,那么您别无选择,只能在全局window
对象上使用动态属性符号,或者如果没有,则使用eval
。在全局范围内用AuditForm
声明var
:
如果您在全局范围内用AuditForm
声明了var
:
fileIt(window[formID]);
如果不这样做:
fileIt(eval(formID));
请注意,eval
是一个非常差的选择,好像obj.id
可以解释为其他代码,例如另一个eval
调用将被评估,然后可以执行恶意操作。示例:
const obj = {
id: "eval('alert(\"Inside an eval script!\")')"
};
eval(obj.id);