谷歌脚本如何动态调用库函数?

时间:2013-09-08 16:31:41

标签: javascript function dynamic google-apps-script

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

3 个答案:

答案 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套数学函数,你总是可以在需要时访问它。