感谢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类型。
我不知道如何理解这样的错误,我将不胜感激。
答案 0 :(得分:0)
所以我只知道问题所在。
我需要更换
func.apply(null, attributes);
和func.call(null, object);
与
func.apply(MailApp, attributes);
和func.call(MailApp.object);