Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/442.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何扩展GoogleApps脚本类_Javascript_Google Apps Script - Fatal编程技术网

Javascript 如何扩展GoogleApps脚本类

Javascript 如何扩展GoogleApps脚本类,javascript,google-apps-script,Javascript,Google Apps Script,我试图在脚本中扩展类工作表,但当它尝试执行以下命令时,我得到的工作表未定义: Sheet.prototype.moveColumn = function(SourceIndex, DestinationIndex){ var source = this.getRange(1, SourceIndex, ss.getLastRow(), 1).getValues() var move = SourceIndex-DestinationIndex>0 ? sheet.getRange(

我试图在脚本中扩展类工作表,但当它尝试执行以下命令时,我得到的工作表未定义:

Sheet.prototype.moveColumn = function(SourceIndex, DestinationIndex){
  var source = this.getRange(1, SourceIndex, ss.getLastRow(), 1).getValues()
  var move = SourceIndex-DestinationIndex>0 ? sheet.getRange(1, DestinationIndex,  ss.getLastRow(), SourceIndex-DestinationIndex).getValues() : sheet.getRange(1, SourceIndex, ss.getLastRow(), DestinationIndex-SourceIndex).getValues();
  sheet.getRange(1, DestinationIndex, source.length, 1).setValues(source);
  SourceIndex-DestinationIndex>0 ? sheet.getRange(1, DestinationIndex+1, move.length, move[0].length).setValues(move) : sheet.getRange(1, SourceIndex, move.length, move[0].length);
  return this
}

您不能扩展Google类的原型。你可以在问题追踪器上找到关于这一点的评论,

到目前为止,只有谷歌,而不是它的用户,可以做到这一点,特别是,在中,可以扩展{非本机JavaScript的类,这是谷歌的类},因此可以做一些事情,比如“.prototype.MyMethod=function(…){,其中,Google在每个{功能组件下的“类”下定义了这些类,作为中的第一个“日历”

  • 能够扩展Google的类是非常方便和自然的,包括已知的解决方法(详细如下)也是相当丑陋的。事实上,我这个答案的发起者发布了这个答案,因为最重要的是,我经常想做这样的扩展,这是我自己的同情心,并希望帮助其他人尝试做同样的事情。但是
  • 谷歌为什么要阻止这种行为,至少是为了用户自己的使用,用户似乎并不知道。虽然
  • 谷歌在这一点上感到不安,因为它们都破坏了自己提供的东西&不说原因,这一点也不足为奇,因为它们都:
  • 虽然谷歌的GAS功能主要是JavaScript,事实上,GAS是它可以说是最好的资产,但与JS相比,GAS实际上有更多令人不安的、未记录的限制
  • 谷歌几乎从不告诉用户他们为什么要终止他们的产品,甚至在做出这样的删除决定之前也不发出警告,所以谷歌也不告诉用户他们为什么要破坏他们的产品,这似乎并不奇怪
  • 关于这个问题的另一份官方报告是(from),这是关于这个问题的官方网络讨论,包括显然任何人都可以投票支持这个功能,当登录谷歌时,点击讨论的明星或/并在那里发表评论请求
  • 已知的直接和间接尝试均失败:
  • NP4CP4:'。原型 .MyMethod=..'gets'引用错误:“未定义工作表”
  • NP3LNQ:'SpreadsheetApp.getActiveSpreadsheet()…原型 .MyMethod=..'gets'类型错误:无法从未定义的中读取属性“prototype”
  • NP4CQR:'SpreadsheetApp.getActiveSpreadsheet().getActiveSheet()。 .MyMethod=…' 获取'TypeError:无法将未定义的属性“MyMethod”设置为“(类)@26d5fab1”。'
  • NP4K1W:'(SpreadsheetApp.getActiveSpreadsheet().getActiveSheet()) .MyMethod=..'gets'TypeError:无法将null的属性“MyMethod”设置为“(类)@b73c746”。'
  • 有关该问题的更多详细信息,请参见{前面更具体的请求}答案“”
  • 解决办法包括:
  • NP4J3T:将要添加的每个方法编码为普通函数调用(这样就牺牲了方法功能)
  • NP4IGZ:一种局部解决方法,适用于不需要扩展类的许多情况,即定义并使用一个新类来存储指向要扩展的对象(在原始类中)的链接,并在新类中添加所需的新方法,以及(痛苦的部分)在新类中,还需要重新实现每个原始类的现有方法(可能会更改!),在每个方法实现为(委托)对原始方法的调用时,都需要重新实现这些方法。
  • 提出这一解决方案可能是发布的原因,这似乎是它试图引用的