应用情景:页面传入特定的字符串给init函数(如abc),init函数判断是否存在该字符串为函数名的函数。
如var abc=function()或function abc。有则调用,没有则不予理睬。
由于以字符串为函数名的函数数量很大(可能大于100个)而且字符串会变化,无法一次写好所有的函数,需要动态调用。现在我使用(typeof(eval(字符串获取函数())) == 'function')来判断是否存在,但是总是报错。
ie提示找不到“字符串获取函数”(如,找不到abc)。
请问大家,如何判断脚本中是否有我需要的函数。或者有其他什么办法。

解决方案 »

  1.   

    你的function需要这么写:var abc = function(){
        alert(123);
    }然后typeof eval("loginLoad") = function
    搞定~~
      

  2.   

    sorry然后typeof eval("abc") = function
    搞定~~
      

  3.   

    如果你的函数都在全局环境中,可以这样
     <script type="text/javascript">
        //<![CDATA[        function init(funName) {
                if (funName in window) {
                    alert("存在");
                }
                else {
                    alert("不存在");
                }
            };
            function sayHello() {
                alert("hello world");
            };        init("sayHello");    //]]>
      

  4.   

    我就是这样用的,不过不起作用,原来是ie6环境,没有测试但是没有问题。
    升级到ie8后就有问题了,不知道是浏览器问题还是语句问题。
    这个是我原来的代码,如果getString函数返回的是world,示例中的代码结果总是提示“找不到world”<script type="text/javascript">
        //<![CDATA[        function init() {
                if(typeof(eval(getString())) == 'function'){//原来的判断语句
                   eval(getString());
                }
            };
            function hello() {
                alert("hello world");
            };        function getString(){
               return "hello";//获取字符,这里用hello代替
            }    //]]>
    我正好是truelove12所说的那种情况,测试通过。
      

  5.   

    sorry,应该是
            var hello = function () {
                alert("hello world");
            };