Javascript中eval的替代方案

Javascript中eval的替代方案,javascript,Javascript,我创建了一个属于特定类的对象 var schCom1 = Server.CreateObject(ArchiveProgID); 现在,这个对象调用动态决定的方法 fnName += "("; for (counter=0;counter<fnArgs.length;counter++) { if(counter > 0) fnName += ",

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

            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);   
fnName+=”(”;
用于(计数器=0;计数器0)
fnName+=“,”;
fnName+=fnArgs[计数器];
}
fnName+=”;
writeComment(“准备调用方法:”+“schCom1.”+fnName);
//根据重现的类型,调用方法
eval(“schCom1.+fnName”);
这个评估电话有可能被替换吗

任何帮助都是有价值的

提前感谢。

Tazim.

您可以使用更简单的

schCom1[fname].apply(schCom1, fnArgs)

这将替换上面的所有代码

您可以使用更简单的

schCom1[fname].apply(schCom1, fnArgs)

如果fnName确实是schCom1对象的方法的名称,那么它将替换上面的所有代码

schCom1[fnName].apply(schCom1,fnArgs);
基本上,函数对象的
apply
方法允许您调用函数并提供上下文(父对象)和参数。而
apply
方法期望函数参数作为数组提供,这在本例中很有用

有关更多信息,请参阅
apply
方法的文档:

还有
call
方法,它执行类似的操作,但期望函数参数作为常规参数列表:


如果fnName确实是schCom1对象方法的名称:

schCom1[fnName].apply(schCom1,fnArgs);
基本上,函数对象的
apply
方法允许您调用函数并提供上下文(父对象)和参数。而
apply
方法期望函数参数作为数组提供,这在本例中很有用

有关更多信息,请参阅
apply
方法的文档:

还有
call
方法,它执行类似的操作,但期望函数参数作为常规参数列表:


对于循环,可能的重复应该使用
fnName+=”(“+fnArgs.join(“,”+”)
而不是
,对于
循环,可能的重复应该使用
fnName+=”(“+fnArgs.join(“,”+”)而不是
。你的意思是
schCom1[fnName]。应用
?除此之外,回答得很好:)@Aistina是的,谢谢!(没有看到血腥的地方)
这个
可能指向一个全局变量,在这个上下文中,它实际上应该是
schCom1
而不是
schCom1[fnName]。应用
?除此之外,回答得很好:)@Aistina是的,谢谢!(没有看到血腥的地方)
这个
可能指向一个全局变量,在这个上下文中,它应该是
schCom1
而不是很多。这个答案对于理解fnname不是schCom1函数名的真实名称这一概念非常有帮助。fnName=请求(“fnName”)。它应该是schCom1[请求(“fnName”)]。apply(schCom1,fnArgs);很多。这个答案对于理解fnname不是schCom1函数名的真实名称这一概念非常有帮助。fnName=请求(“fnName”)。它应该是schCom1[请求(“fnName”)]。apply(schCom1,fnArgs);