js 把字符串当函数执行的方法

作者: 阳光很耀眼 | 来源:发表于2017-09-18 20:36 被阅读0次

    在某些情况下,传递函数名之后,接收的不是函数而是函数名的字符串类型;

    解决方法:

    1. eval
    eval方法—用来执行字符串代表的 javascript 代码。
    如果传递的不是字符串的话,会直接返回传值,而非调用。

    例如:

    function test(str){ 
    alert(str); 
    } 
    //如果param是值;
    eval('test("param")'); 
    //如果param是变量;
    var param = 'B';
    eval('test(param)'); //会查找名为param的变量,如果找不到会抛出异常
    

    2. 把方法名看成属性名就行了
    由于eval 效率低下以及不安全性,正常情况下我们并不会直接使用这种方法来调用一个函数。由于函数在javascript 里面可以被保存在对象中,因此通过对象的属性访问将会是更好的选择。

    说明:

    1. 全局函数声明会变成全局对象的属性。
      全局对象是在进入执行上下文前创建的一个唯一的对象。
      在浏览器运行环境中,全局对象就是window对象。
    2. 属性访问可以使用 点标记法 或者 括号标记法 ,其中,使用点访问时需要使用标识符,而使用括号访问时使用的是标识符对应的字符串。

    例如:

    function test(str) { 
        alert(str); 
    } 
    window['test']('param'); //直接执行
    
    window['test'].call(this,'param');//如果需要修改函数运行时的this
    

    如果函数是其他对象的属性,也是同理调用。

    相关文章

      网友评论

        本文标题:js 把字符串当函数执行的方法

        本文链接:https://www.haomeiwen.com/subject/rfxisxtx.html