我有一组在每个库中具有相同功能的库(每个库都与模板相关联,每次都可以使用不同的模板,具体取决于用户请求)。我正在尝试创建一个动态调用函数的代码。只要函数在同一个脚本中,这就没问题。但是,我的函数在不同的库中,当我尝试调用它时,我收到一个错误: 执行失败:TypeError:无法在对象[object Object]中找到函数Script2.returnWord。 (第25行,文件“dynamicFunctionsTest”)。
以下是代码:
function test1() {
return 'raining';
}
function test2() {
return 'cats';
}
function test3() {
return ScriptLibrary1.returnWord(); // the function returns the word 'and'
}
function testing() {
var message;
var func = [];
func [0] = 'test1';
func [1] = 'test2';
func [2] = 'test3';
func [3] = 'ScriptLibrary2.returnWord'; // the function returns the word 'dogs'
Browser.msgBox(func); // check values before calling
for (var i = 0; i < func.length ; ++i) {
message = this[func[i]](); // this line fails on the 4th one
Browser.msgBox(message);
}
}
我得到前3个工作(第三个只是一个测试,看看我是否可以在本地调用哪个有效,但不足以达到我的目的),但它在第4个失败了。
任何人都知道如何让它发挥作用?
感谢。 PS。该脚本是从谷歌电子表格中调用的。
答案 0 :(得分:1)
一个选项可能是使用eval(),但请记住,您必须小心使用此功能。
...
message = eval(func[i])();
...
另一种选择可能是:
...
var myFunc;
...
myFunc = new Function('return ' + func[i]);
message = myFunc()();
...
答案 1 :(得分:0)
这不是库的使用方式。 将所有内容放在一个lib上,并有一个额外的参数,告诉它要调用哪一个。
答案 2 :(得分:0)
我同意Zig,你能解释为什么你需要单独的库吗?
通常你会这样做是因为逻辑分组(电子邮件函数/数学函数/特定于应用程序的函数等),当然你不会在库之间重复函数。就像Excel中的插件一样,你没有围绕不同插件的数学函数,你在1个库中有1套数学函数,你总是可以在需要时访问它。