JavaScript function.bind() 在 google 工作表中受支持吗?
Is JavaScript function.bind() supported in google sheets?
这里是我尝试在 google 工作表脚本中 运行 的简单代码。
目的是提供 foreach
回调函数附加参数。
function print(str, num) {
Logger.log(str + ": " + num);
}
function test()
{
var array = [1,2,3];
var str = "Stam";
//This line has an exception
// TypeError: Cannot convert null to an object
array.forEach(print.bind(null, str));
}
test();
此代码基于 中描述的解决方案。
我知道还有其他解决方案,但我想了解为什么这个不起作用。
我想也许 google 张纸不支持它。
这个答案怎么样?请将此视为几个可能的答案之一。
在Javascript处,使用bind(null, str)
的null
时,使用this
。在 Google Apps 脚本中,当 null
用于 bind(null, str)
时,会出现类似 "Cannot convert null to an object" 的错误。我认为这可能是 Google 方面的规范。我不确定这是否会在未来的更新中被修改。因此,作为当前的解决方法,使用 this
而不是 null
怎么样?或者如果你想在严格模式下使用bind(null, str)
像null
,那么使用{}
而不是像bind({}, str)
那样的null
怎么样?
顺便说一下,我认为您脚本最后一行的 test();
可以删除。因为在您的情况下,当 test()
在脚本编辑器中是 运行 时, test()
是 运行 2 次 test();
在最后一行。最后一行的 test();
是 运行 作为全局。
从上面的情况来看,当你的脚本修改后,下面的修改怎么样?
修改后的脚本:
function print(str, num) {
Logger.log(str + ": " + num);
}
function test() {
var array = [1,2,3];
var str = "Stam";
array.forEach(print.bind(this, str));
}
或者您也可以按如下方式修改脚本的 test()
。以下 test()
检索与上述相同的结果。
function test() {
var array = [1,2,3];
var str = "Stam";
array.forEach(function(e) {print(str, e)});
}
结果:
当你在脚本编辑器运行 test()
时,你可以在日志中看到如下结果。
Stam: 1
Stam: 2
Stam: 3
参考:
如果我误解了您的问题并且这不是您想要的方向,我深表歉意。
这里是我尝试在 google 工作表脚本中 运行 的简单代码。
目的是提供 foreach
回调函数附加参数。
function print(str, num) {
Logger.log(str + ": " + num);
}
function test()
{
var array = [1,2,3];
var str = "Stam";
//This line has an exception
// TypeError: Cannot convert null to an object
array.forEach(print.bind(null, str));
}
test();
此代码基于
我知道还有其他解决方案,但我想了解为什么这个不起作用。
我想也许 google 张纸不支持它。
这个答案怎么样?请将此视为几个可能的答案之一。
在Javascript处,使用bind(null, str)
的null
时,使用this
。在 Google Apps 脚本中,当 null
用于 bind(null, str)
时,会出现类似 "Cannot convert null to an object" 的错误。我认为这可能是 Google 方面的规范。我不确定这是否会在未来的更新中被修改。因此,作为当前的解决方法,使用 this
而不是 null
怎么样?或者如果你想在严格模式下使用bind(null, str)
像null
,那么使用{}
而不是像bind({}, str)
那样的null
怎么样?
顺便说一下,我认为您脚本最后一行的 test();
可以删除。因为在您的情况下,当 test()
在脚本编辑器中是 运行 时, test()
是 运行 2 次 test();
在最后一行。最后一行的 test();
是 运行 作为全局。
从上面的情况来看,当你的脚本修改后,下面的修改怎么样?
修改后的脚本:
function print(str, num) {
Logger.log(str + ": " + num);
}
function test() {
var array = [1,2,3];
var str = "Stam";
array.forEach(print.bind(this, str));
}
或者您也可以按如下方式修改脚本的 test()
。以下 test()
检索与上述相同的结果。
function test() {
var array = [1,2,3];
var str = "Stam";
array.forEach(function(e) {print(str, e)});
}
结果:
当你在脚本编辑器运行 test()
时,你可以在日志中看到如下结果。
Stam: 1
Stam: 2
Stam: 3
参考:
如果我误解了您的问题并且这不是您想要的方向,我深表歉意。