当前位置:  开发笔记 > 编程语言 > 正文

使用字符串调用JavaScript函数名称?

如何解决《使用字符串调用JavaScript函数名称?》经验,为你挑选了4个好方法。

如何将事件连接到我定义为字符串的函数名称?

我正在使用Prototype.js,虽然这不是Prototype-speficic.

$(inputId).observe('click', formData.fields[x].onclick);

这会导致JavaScript抱怨我的处理程序不是函数.我不希望我们使用eval().



1> Greg..:

如果函数在全局范围内,则可以使用window对象获取它:

var myFunc = window[myFuncName];


...或范围[myFuncName]一般

2> Ikon..:

我已经解决了这个问题,因为我需要这样的功能.这是我的沙箱代码,没有经过全面测试,但可以成为其他人的起点.请注意,代码中有一个eval(),因为我无法弄清楚如何绕过该步骤,可能是一个javascript怪癖,无法以任何其他方式完成.如果有办法摆脱eval(),请告诉我!

executeFunctionByName = function(functionName)
{
    var args = Array.prototype.slice.call(arguments).splice(1);
    //debug
    console.log('args:', args);

    var namespaces = functionName.split(".");
    //debug
    console.log('namespaces:', namespaces);

    var func = namespaces.pop();
    //debug
    console.log('func:', func);

    ns = namespaces.join('.');
    //debug
    console.log('namespace:', ns);

    if(ns == '')
    {
        ns = 'window';
    }

    ns = eval(ns);
    //debug
    console.log('evaled namespace:', ns);

    return ns[func].apply(ns, args);
}


core = {
    paragraph: {
        titlebar: {
            user: "ddd",
            getUser: function(name)
            {
                this.user = name;
                return this.user;
            }
        }
    }
}

var testf = function()
{
    alert('dkdkdkd');
}

var x = executeFunctionByName('core.paragraph.titlebar.getUser', 'Ikon');
executeFunctionByName('testf');



3> dkretz..:

......或者这个[myFuncName];



4> Anthony Scai..:

也许?

setTimeout ( "myFunc()", 1 );

推荐阅读
赛亚兔备_393
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有