Mar*_*ell 18 google-apps-script
我在哪里可以阅读有关GS文件执行顺序规则的文档?
为了确定问题的维度,我创建了两个简单的对象,每个对象都在自己的文件中.
1_File.gs
var ObjB = new Object();
ObjB.sayName = "[" + ObjA.sayName + "]";
Run Code Online (Sandbox Code Playgroud)
0_File.gs
var ObjA = new Object();
ObjA.sayName = " I'm A ";
Run Code Online (Sandbox Code Playgroud)
像...这样的电话
Logger.log(ObjA.sayName + " : " + ObjB.sayName);
Run Code Online (Sandbox Code Playgroud)
......得到错误......
TypeError: Cannot read property "sayName" from undefined.
Run Code Online (Sandbox Code Playgroud)
如果我将代码从1_File.gs移动到0_File.gs,反之亦然,那么没有错误,日志显示正确...
我是A:[我是A]
将0_File.gs重命名为2_File.gs也不会影响执行顺序,因此我假设该顺序取决于首先创建的文件.
是否没有"包含"或"导入"的概念可以让我明确执行执行顺序?
meg*_*024 11
我在哪里可以阅读有关GS文件执行顺序规则的文档?
没有这样的文件,我认为不会发布任何时间.以类似的方式,C++中静态变量的初始化顺序也是未定义的,并且依赖于编译器/链接器.
是否没有"包含"或"导入"的概念可以让我明确执行执行顺序?
是的,没有"包含","进口"甚至"模块",但有图书馆.
还有一个使用闭包的解决方法.贝娄是一个示例代码.通过执行日志包含的测试功能c.d.我们的想法是在所有gs文件中都有一个以函数开头的函数init.在这些函数中,所有全局变量都是实例化的.匿名闭包在Code.gs文件实例化期间执行,并调用所有文件的所有"init"函数gs.
Code.gs
var c;
function callAllInits_() {
var keys = Object.keys(this);
for (var i = 0; i < keys.length; i++) {
var funcName = keys[i];
if (funcName.indexOf("init") == 0) {
this[funcName].call(this);
}
}
}
(function() {
callAllInits_();
c = { value : 'c.' + d.value };
})();
function test() {
Logger.log(c.value);
}
Run Code Online (Sandbox Code Playgroud)
d.gs
var d;
function initD() {
d = { value : 'd' };
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5551 次 |
| 最近记录: |