0

我有一组库,每个库都具有相同的功能(每个库都与一个模板相关联,并且每次可以使用不同的模板,具体取决于用户请求)。我正在尝试创建一个动态调用函数的代码。只要函数在同一个脚本中就可以了。但是,我的函数位于不同的库中,当我尝试调用它们时出现错误:执行失败: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。该脚本是从谷歌电子表格中调用的。

4

3 回答 3

1

一种选择可能是使用eval(),但请记住,您必须小心使用此功能。

...
message = eval(func[i])();
...

另一种选择可能是:

...
var myFunc;
...
myFunc = new Function('return ' + func[i]);
message = myFunc()();
...
于 2013-09-08T19:05:37.650 回答
0

这不是库的使用方式。将所有内容放在一个库中,并有一个额外的参数告诉它调用哪个库。

于 2013-09-08T19:44:10.470 回答
0

我同意 Zig,您能解释一下为什么需要单独的库吗?

通常你会这样做是因为逻辑分组(电子邮件函数/数学函数/特定于应用程序的函数等),当然你不会跨库重复函数。就像 Excel 中的插件一样,您没有散布在不同插件中的数学函数,您在 1 个库中有一组数学函数,并且您始终可以在需要时访问该库。

于 2013-09-09T12:02:05.637 回答