我知道SO
(1,2,3)上已经存在一些类似的问题,但是很遗憾,由于我对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/