rom*_*oma 0 global-variables google-apps-script
考虑以下简单示例,文件country.gs
class Country { }
Run Code Online (Sandbox Code Playgroud)
和文件subcountry.gs
class SubCountry extends Country{ }
function test(){}
Run Code Online (Sandbox Code Playgroud)
尝试运行 test() 我得到
ReferenceError: Country is not defined
Run Code Online (Sandbox Code Playgroud)
如果我加入文件或更改加载顺序,它就可以正常工作。
显然,我不想依赖于文件加载顺序,也不想在推送时进行更改(按字母顺序排序),所以这绝对不是重命名文件以便编译它们的好方法。
对此有合适的解决方案吗?
例子:
正如文档中所写,
这种安排与浏览器处理一个 HTML 文件中多个标签的方式相同。
每个文件就像一个新<script>file content </script>标签,它们按照在 Apps 脚本编辑器中出现的顺序添加。仅当您使用全局变量时这才是问题。明确不鼓励使用全局变量。
注意:依靠特定的文件解析顺序来避免此问题并不是最佳实践。如果复制、删除、重命名或以其他方式重新排列脚本文件,则脚本文件解析的顺序可能会更改。如果可能的话,最好删除对函数调用的任何全局变量依赖。
类实际上是“特殊函数”。您始终可以Class根据文档中的建议将 包含在本地范围内并在需要时进行调用。
只需将调用函数移至本地范围就可以了
/*subcountry.gs*/
function test(){
/*local scope*/class SubCountry extends Country{ }
}
Run Code Online (Sandbox Code Playgroud)
为了避免在全局范围内声明类:
/*country.gs*/
var Country;
function main(){
if (Country == undefined) Country = class Country { }
return Country;
}
Run Code Online (Sandbox Code Playgroud)
/*subcountry.gs*/
function test(){
/*initialize class Country*/main()
/*local scope*/class SubCountry extends Country{ }
}
Run Code Online (Sandbox Code Playgroud)