javascript - 谷歌表格是否支持 JavaScript function.bind()?
问题描述
这是我试图在谷歌表格脚本中运行的简单代码。目的是为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();
此代码基于此处描述的解决方案。
我知道还有其他解决方案,但我想了解为什么这个不起作用。
我想也许谷歌表格不支持它。
解决方案
这个答案怎么样?请认为这只是几个可能的答案之一。
在 Javascript 中,使用null
ofbind(null, str)
时this
使用。在 Google Apps 脚本中,当null
用于时bind(null, str)
,会出现“无法将 null 转换为对象”之类的错误。我认为这可能是谷歌方面的规范。我不确定这是否在未来的更新中被修改。因此,作为当前的解决方法,使用this
而不是如何null
?或者如果你想在严格模式下使用bind(null, str)
like ,使用而不是like怎么样?null
{}
null
bind({}, str)
顺便说一句,我认为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
参考:
如果我误解了您的问题并且这不是您想要的方向,我深表歉意。
推荐阅读
- javascript - 使用 AJAX 将 Javascript 数组传递给 PHP
- android - AAPT:错误:意外元素
在发现 我尝试克隆要运行的 github 示例项目,但由于此错误而无法运行 - java - 将变量传递给 Runnable 在下一行设为 null 之前为 null
- angular - 角度变化检测是否发生在服务中?
- c# - 用于验证视图模型的 asp.net 核心方法
- typescript - 修改后的@types/nouislider .ts 文件上的 VS Code Typescript 构建错误
- python - 关于解释随机森林的问题
- java - 在 JShell 中,如何从字符串中加载 Java 代码?
- windows - 如何从在 Windows 上运行的 Docker 容器中对 LAN 端点进行 arping?
- python - Jupyter 笔记本和虚拟环境 pip 的问题