google-apps-script - 如何在不同的文件中使用 GAS 类,与文件加载顺序无关?
问题描述
考虑以下简单示例,文件country.gs
class Country { }
和文件subcountry.gs
class SubCountry extends Country{ }
function test(){}
试图运行 test() 我得到
ReferenceError: Country is not defined
如果我加入文件或更改加载顺序,它工作正常。
显然,我不想依赖于文件加载顺序,也不想在推送时进行更改(按字母顺序排序),所以这绝对不是重命名文件以便编译它们的好方法。
有没有合适的解决方案?
例子:
解决方案
如文档中所述,
这种安排与浏览器处理一个 HTML 文件中的多个标签的方式相同。
每个文件就像一个新<script>file content </script>
标签,它们按照它们在应用程序脚本编辑器中出现的顺序添加。仅当您使用全局变量时,这才是问题。明确不鼓励使用全局变量。
警告:最好不要依赖特定的文件解析顺序来避免此问题。如果脚本文件被复制、删除、重命名或以其他方式重新排列,则脚本文件解析的顺序可能会改变。如果可能,最好删除对函数调用的任何全局变量依赖。
类实际上是“特殊功能”。您始终可以将 包含Class
在本地范围中并在需要时按照文档中的建议进行调用。
片段:
只需将调用函数移动到本地范围就可以了
/*subcountry.gs*/
function test(){
/*local scope*/class SubCountry extends Country{ }
}
为了避免在全局范围内声明类:
/*country.gs*/
var Country;
function main(){
if (Country == undefined) Country = class Country { }
return Country;
}
/*subcountry.gs*/
function test(){
/*initialize class Country*/main()
/*local scope*/class SubCountry extends Country{ }
}
推荐阅读
- javascript - 由于 zindex,Fomantic ui toast 没有出现
- python - 无法在 Slack 上获取 Scrapinghub 通知。面对错误
- python - 是否可以在 python 中使 Instance == string/int/float 或任何数据类型为 True?
- php - aws ec2 lighsail nginx没有指向laravel
- python-3.x - 当收到带有 XML 正文的 HTTP 响应时,GCP Cloud Functions 因“连接错误”或“崩溃”而失败
- java - 如何在 Java 中创建多行字符串?
- javascript - 循环内的setTimeout,停止脚本工作
- ionic3 - 如何从 angularfire2 cloud firestore 获取新创建的自动生成的 ID
- angularjs - 在 Angular 中使用三元运算符计算属性值
- git - 无法从 Dockerfile 中的克隆仓库复制文件