如何将Apps Script函数值传递给另一个函数并在那里调用它?

时间:2018-02-12 17:48:31

标签: javascript google-apps-script

感谢this answer,我已经能够使用任意数量的参数调用泛型函数。但是当我进一步完善我的代码时,我遇到了这个问题:

function test() {
  var object = {to: "test@domain.com", subject: "subject line", body: "using object"};
  var attributes = ["test@domain.com", "subject line", "using attributes"];
  pass_to_func1(MailApp.sendEmail, attributes); 
  pass_to_func2(MailApp.sendEmail, object);
}

function pass_to_func1(func, attributes) {
  try {
    func.apply(null, attributes);
  }
  catch (e) {
    Logger.log(e.name + ": " + e.message);
    return;
  }
  Logger.log("pass_to_func1 success");
}

function pass_to_func2(func, object) {
  try {
    func.call(null, object);
  }
  catch (e) {
    Logger.log(e.name + ": " + e.message);
    return;
  }
  Logger.log("pass_to_func2 success");
}

正如您所看到的,我正在尝试将MailApp.sendEmail功能值作为参数传递给“中间人”功能,其中我有两个版本。

一个调用带有Function.prototype.apply的函数参数,其中包含一个字符串数组作为参数(发送到电子邮件,主题,正文)。

另一个调用带有Function.prototype.call的函数参数,并以javascript对象作为参数(有关详细信息,请参阅MailApp开发人员参考)。

它们都抛出相同的错误,如下所示:

  

InternalError:使用[object Object]作为“this”值调用方法“sendEmail”,该值无法转换为MailApp类型。

我不知道如何理解这样的错误,我将不胜感激。

1 个答案:

答案 0 :(得分:0)

所以我只知道问题所在。

我需要更换

func.apply(null, attributes);func.call(null, object);

func.apply(MailApp, attributes);

func.call(MailApp.object);