我知道SO123)上已经存在一些类似的问题,但是很遗憾,由于我对JS的了解有限,因此我无法将这些情景推论到我的个人用例中,因此这个问题。

我有以下代码,使我可以动态地附加到对象并从对象中调用一些功能正常的函数(available on JsFiddle):

JavaScript:

$.extend(true, window, {
    "MyPlugin": {
        "dynamicFunction": dummy_function
     }
});

function dummy_function() {

}

function real_function(string) {
    alert(string);
}

function dynamic_call(function_name, text) {
    MyPlugin["dynamicFunction"] = eval(function_name);
    MyPlugin["dynamicFunction"](text);
}​


HTML:

<button onClick="dynamic_call('real_function','some text');">click me</button>​


更新:

有趣的是,我试图复制一个问题,据此我的函数只能在本地范围内使用,但是我结束了写一个不是:)的示例(我告诉你JS不是我的事)。因此,所有window[function_name]答案都是正确的,尽管我接受James Allardice的原因是因为他推断出我试图解决但没有提出的问题。

不使用eval如何实现相同的功能?

最佳答案

全局作用域中的函数声明成为window的属性,因此可以使用方括号语法:

function dynamic_call(function_name, text) {
    MyPlugin["dynamicFunction"] = window[function_name];
    MyPlugin["dynamicFunction"](text);
}​


如果您的函数不在全局范围内,则可以将其设为某个对象的属性值:

var myFuncs = {
    real_function: function () {
        alert(string);
    }
};


然后,您可以简单地使用:

MyPlugin["dynamicFunction"] = myFuncs[function_name];

关于javascript - 如何将函数动态附加到对象,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11471175/

10-12 00:18
查看更多