我一直在努力找出一段时间来编写GAS库的最佳方法,但我有时间计算它。我读了Douglas Crockford的 - Javascript:好的部分,我正在尝试在GAS中实现这些课程。每个导入的库都会向您的项目(ScriptModule类型)添加全局变量,因此the modular design pattern似乎是一个很好的起点。借用我链接到这种模式的文章可能如下所示:
var MODULE = (function () {
var my = {},
privateVariable = 1;
function privateMethod() {
// ...
}
my.moduleProperty = 1;
my.moduleMethod = function () {
// ...
};
return my;
}());
然后可以像这样调用此模块:
var module = LibName.MODULE;
var property = module.moduleProperty; // 1
var method = module.moduleMethod; // ...
从我收集的内容来看,最好尽量减少全局变量,因此一般建议似乎是将所有内容保存在一个全局变量中。因此,命名约定应如下所示:LibName.PROJECT_NAME,其中项目名称是您的单个全局变量的名称,该变量包含一个包含其他所有内容的模块。
我的目标是设计安全,无冲突的库。我是否正确使用这种设计模式?有没有人为GAS库开发了自己强大的设计模式呢?
答案 0 :(得分:2)
当您在GAS中将脚本导入为库时,已经为其创建了一个新的“命名空间”,因此您无需自己创建另一个“命名空间”。你必须“尊重”它,就像你一样:
//there's no purpose for this
var module = LibName.MODULE;
var method = module.method;
//comparing if you write code directly on the library
var method1 = LibName.method1;
GAS不是客户端javascript,您学到的大多数内容并不真正适用于Apps脚本,例如没有DOM,没有命名空间冲突,没有浏览器兼容性问题等等。
顺便说一句,我认为这个对象嵌套结构甚至不适用于Apps脚本库。