javascript通过字符串函数名调用函数的方法


在某些场景下,可能需要通过动态的方式调用js的函数或方法。我遇到的这种情况是为了将后台的json数据渲染到弹窗中,其中有普通页面也有表单数据,这时候表单的内容不同在提交表单后处理成功或失败的方法也有些不同,一开始我使用if判断分别处理,业务简单的时候还可以。后来发现这段业务还可以继续抽象完全把处理响应的业务转给对应的form页面更漂亮。经过一番查找和测试终于找到下面的方法。留以备用。js中并没有像php中的call_user_func()这种原生的函数,通过eval变相实现效果也很好。

//wait for call
    function betterCallMe(func,param1, param2){
        console.log(func + "()", param1,':', param2);
        alert(func + "() " +param1+":"+param2);
    }
    //call it
    function main1(name, a, b){
        var callback = eval(name);
        new callback("main1", a, b);
    }

    //call it too
    function main2(name, a, b){
        var callback = eval(name);
        callback("main2", a, b);
    }

    main1("betterCallMe", "Tom", 'cat');
    main2("betterCallMe", "Jerry", 'mouse');

eval详解:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/eval

Archives