在Javascript中替代eval

时间:2010-11-12 08:35:01

标签: javascript

我创建了一个属于特定类的对象。

            var schCom1 = Server.CreateObject(ArchiveProgID);

现在,该对象调用动态决定的方法。

            fnName += "(";
        for (counter=0;counter<fnArgs.length;counter++)
        {
            if(counter > 0)
                fnName += ",";
            fnName += fnArgs[counter];
        }
        fnName += ")";
        writeComment("Ready to call method:" + "schCom1." + fnName);
        // according to the type of recurrance, call method
        eval("schCom1."+ fnName);   

此评估电话是否可以替换?

任何帮助都是有价值的。

提前致谢。
Tazim。

2 个答案:

答案 0 :(得分:3)

前提是fnName确实是schCom1对象的方法名称:

schCom1[fnName].apply(schCom1,fnArgs);

基本上,函数对象的apply方法允许您调用函数并提供上下文(父对象)和参数。并且apply方法期望函数参数作为数组提供,这在这种情况下很有用。

有关详细信息,请参阅apply方法的文档:

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/function/apply

还有call方法做了类似的事情,但期望函数参数作为常规参数列表:

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/function/call

答案 1 :(得分:2)

您可以使用更简单的

schCom1[fname].apply(schCom1, fnArgs)

将替换那里的所有代码