首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用字符串调用JavaScript函数名?

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

Stack Overflow用户
提问于 2009-01-30 19:50:28
回答 9查看 60.6K关注 0票数 50

如何将事件与定义为字符串的函数名关联起来?

我使用的是Prototype.js,尽管这不是原型专用的。

代码语言:javascript
复制
$(inputId).observe('click', formData.fields[x].onclick);

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

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2009-01-30 19:53:53

Property accessors可用于访问任何对象的属性或函数。

如果该函数在全局作用域中,则可以使用window对象获取它:

代码语言:javascript
复制
var myFunc = window[myFuncName];

这也适用于this作用域:

代码语言:javascript
复制
var myFunc = this[myFuncName];
票数 85
EN

Stack Overflow用户

发布于 2010-10-26 19:19:25

我已经解决了这个问题,因为我需要一个这样的函数。这是我的沙箱代码,没有经过彻底的测试,但可以作为其他人的起点。注意,在代码中有一个eval(),因为我不知道如何绕过这一步,可能是javascript的怪癖,并且不能用任何其他方式来完成。如果有办法在这里去掉eval(),请告诉我!

代码语言:javascript
复制
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');
票数 9
EN

Stack Overflow用户

发布于 2009-01-30 19:57:58

..。或thismyFuncName;

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/496961

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档