我在JScript
下运行了WSH
脚本。
在我的代码中,我使用eval()
函数。传递给eval()
的字符串本质上是另一段要执行的代码。我希望这段代码能够定义特定名称的功能。说func()
在eval()
调用后,如何知道预期定义的函数是否确实存在且可调用。
function isFuncCallable() {
for (var m in this)
if (typeof this[m] == "function" && this[m] == 'func')
return true;
return false;
}
eval("function func() { WScript.Echo(\"func was called\") }");
if (isFuncCallable())
func();
else
WScript.Echo("func is not callable");
isFuncCallable
无法正常工作,因为我希望它可以正常工作。它返回false但是如果我调用func()
则是有效的调用。
如建议
这是有效的
function isFuncCallable() {
for (var m in this)
if (typeof this[m] == "function" && m == 'func')
return true;
return false;
}
eval("function func() { WScript.Echo(\"func was called\") }");
if (isFuncCallable())
func();
else
WScript.Echo("func is not callable");
}
虽然这不是:
function Main() {
function isFuncCallable() {
for (var m in this)
if (typeof this[m] == "function" && m == 'func')
return true;
return false;
}
eval("function func() { WScript.Echo(\"func was called\") }");
if (isFuncCallable())
func();
else
WScript.Echo("func is not callable");
}
Main();
答案 0 :(得分:0)
您无需使用this[m]
。
if (typeof this[m] == "function" && this[m] == 'func')
应该是
if (typeof this[m] == "function" && m == 'func')
相反,因为for (x in y)
遍历y的每个元素 - 您正在考虑使用for (x = 0; x < y.length; x++)
样式语法。