Google apps script 是否可以通过模块';s函数作为电子表格应用程序的函数名';什么菜单?
我有这样的代码:Google apps script 是否可以通过模块';s函数作为电子表格应用程序的函数名';什么菜单?,google-apps-script,Google Apps Script,我有这样的代码: MyCompany = (MyCompany || {}); MyCompany.init = function () { Logger.log('init'); }; function onOpen() { var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); var menus = [{ name: "Init", functionName: 'how
MyCompany = (MyCompany || {});
MyCompany.init = function () {
Logger.log('init');
};
function onOpen() {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var menus = [{
name: "Init",
functionName: 'how to call MyCompany.init without creating function?'
}];
spreadsheet.addMenu("Test", menus);
};
MyCompany = (MyCompany || {});
MyCompany.init = function () {
Logger.log('init');
};
function callInit() {
MyCompany.init();
}
function onOpen() {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var menus = [{
name: "Init",
functionName: 'how to call MyCompany.init without creating function?'
}];
spreadsheet.addMenu("Test", menus);
};
是否可以在不创建其他函数的情况下调用MyCompany.init?恐怕不可能。应在全局范围内定义在
functionName
参数中使用的函数名称。即使对象是在全局范围内定义的,也不能在菜单中使用其函数
官方脚本参考中没有说明它(也许是,但它隐藏得很好),但是可以通过一些简单的测试来证明,比如在不同范围之间移动函数,看看脚本是否仍然有效
这里(我想)你能做的最好的事情就是创建一个全局函数,它将调用MyCompany.init
,如下所示:
MyCompany = (MyCompany || {});
MyCompany.init = function () {
Logger.log('init');
};
function onOpen() {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var menus = [{
name: "Init",
functionName: 'how to call MyCompany.init without creating function?'
}];
spreadsheet.addMenu("Test", menus);
};
MyCompany = (MyCompany || {});
MyCompany.init = function () {
Logger.log('init');
};
function callInit() {
MyCompany.init();
}
function onOpen() {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var menus = [{
name: "Init",
functionName: 'how to call MyCompany.init without creating function?'
}];
spreadsheet.addMenu("Test", menus);
};
这样,名称空间组织将保持不变