Javascript 在哪个对象上调用.addToUI
我不熟悉javascript和google g-suite javascript编程;但有软件开发经验(如vb.net) 我试图理解以下函数定义,尤其是最后一个.addToUI()方法 我的理解是SpreadsheetApp.getUI()返回一个UI对象,在该对象上调用.createMenu()。我猜这会返回一个菜单对象(我想),然后在该对象上调用.addItem(),它可能还会返回一个菜单对象,那么初始UI对象如何接收.addToUI()方法呢 非常感谢您在这里解释方法链接是如何工作的 谢谢, 丹 对象是根据它来自哪个实例的知识构造的,因此调用Javascript 在哪个对象上调用.addToUI,javascript,google-apps-script,Javascript,Google Apps Script,我不熟悉javascript和google g-suite javascript编程;但有软件开发经验(如vb.net) 我试图理解以下函数定义,尤其是最后一个.addToUI()方法 我的理解是SpreadsheetApp.getUI()返回一个UI对象,在该对象上调用.createMenu()。我猜这会返回一个菜单对象(我想),然后在该对象上调用.addItem(),它可能还会返回一个菜单对象,那么初始UI对象如何接收.addToUI()方法呢 非常感谢您在这里解释方法链接是如何工作的 谢谢
菜单#addToUi()
不需要参数
至于链接菜单
方法,如添加项
和添加分隔符
,它们有效地返回相同基础对象数据的句柄。也就是说,它们确实创建了一个新的对象句柄,因此它们之间的严格相等将返回false
。
还有其他可链接的方法,它们确实会将句柄返回到不同的基础对象,例如您可能期望的那些方法,例如-句柄是新的基础对象,它是原始对象的深层副本,可以单独更新
所以要分解它,这个函数:
function onOpen() {
SpreadsheetApp.getUi()
.createMenu("some menu name")
.addItem('title','function called')
.addSeparator()
.addItem('title 2', 'function called')
.addToUi();
}
在功能上等同于以下各项:
function onOpen() {
// Create a reference to the single Ui class that is active for the user this is running for.
var ui = SpreadsheetApp.getUi();
// Create a new Menu object, which knows which Ui instance it came from
var menu = ui.createMenu("some menu name");
// Bind a new reference to that same object by assigning the return value of the class method
var sameMenuAsAbove = menu.addItem('title', 'function called');
// Because these are object instance methods that mutate the object, they don't have to be chained
sameMenuAsAbove.addSeparator();
sameMenuAsAbove.addItem('title 2', 'function called');
// Because 'sameMenuAsAbove' and 'menu' are references to the same underlying menu object,
// calling 'addToUi()' from EITHER will result in the same appearance.
menu.addToUi();
}
可能会有帮助
如果您理解Python语法,菜单类可能如下所示:
class Menu():
def __init__(self, ui, title):
self.__ui = ui
self.__title = title
self.__drawn = []
def addItem(self, caption, functionName):
self.__drawn.append(Item(caption, functionName))
return self
def addSeparator(self):
self.__drawn.append(Line())
return self
def addSubMenu(self, other_menu):
self.__drawn.append(other_menu)
return self
def addToUi(self):
self.__ui.add(self)
伟大的非常感谢。我还学到了一些新的东西——对象变异——也就是说,java对象在重新训练其引用对象时被调用改变了——我猜。
class Menu():
def __init__(self, ui, title):
self.__ui = ui
self.__title = title
self.__drawn = []
def addItem(self, caption, functionName):
self.__drawn.append(Item(caption, functionName))
return self
def addSeparator(self):
self.__drawn.append(Line())
return self
def addSubMenu(self, other_menu):
self.__drawn.append(other_menu)
return self
def addToUi(self):
self.__ui.add(self)