从eval

时间:2016-10-27 12:17:32

标签: javascript eval jscript wsh

背景

我在JScript下运行了WSH脚本。

在我的代码中,我使用eval()函数。传递给eval()的字符串本质上是另一段要执行的代码。我希望这段代码能够定义特定名称的功能。说func()

问题

eval()调用后,如何知道预期定义的函数是否确实存在且可调用。

努力1 - 失败

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()则是有效的调用。

更新1

如建议

这是有效的

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();

1 个答案:

答案 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++)样式语法。