【问题标题】:How to declare a custom class in google scripts?如何在谷歌脚本中声明一个自定义类?
【发布时间】:2015-10-16 15:19:48
【问题描述】:

我想在我的脚本中创建一个类。

Google Apps Script 语言基于 javaScript,所以我从 javaScript 手册中举了一个例子:

class Polygon {
  constructor(height, width) {
    this.height = height;
    this.width = width;
  }
}

但是,这不起作用。我收到此错误消息:

Missing ; before statement. (line 1, file "Code")

这是否意味着无法在 google 脚本中创建新类?

或者我应该使用不同的语法吗?

【问题讨论】:

    标签: javascript class google-apps-script


    【解决方案1】:

    更新:

    自 2020 年春季起,Google 为支持类的 Apps 脚本引入了 new runtime。新脚本默认使用此运行时,而旧脚本必须转换。脚本编辑器中会显示一个提示,您可以从中转换脚本。

    原答案:

    从历史上看,Javascript 是一种“无类”语言,类是一种尚未被广泛采用的较新功能,并且显然尚未得到 Apps 脚本的支持。

    以下是如何在 Apps 脚本中模仿类行为的示例:

    var Polygon = function(height, width){
      this.height = height;
      this.width = width;
    
      this.logDimension = function(){
        Logger.log(this.height);
        Logger.log(this.width);
      }
    };
    
    function testPoly(){
      var poly1 = new Polygon(1,2);
      var poly2 = new Polygon(3,4);
    
      Logger.log(poly1);
      Logger.log(poly2);
      poly2.logDimension();
    }
    

    【讨论】:

    • 那么这个案例的 JSDoc 怎么样?我无法使自动完成功能适用于此方法中定义的类。知道该怎么做吗?
    • 更新: 现在可以使用了。通过 Apps Script 库引用该类时,必须为 var x = new LibraryName.ClassName();
    • 什么是库名?包含该类的文件的名称?
    • @AdaLovelace Antonio 指的是您将外部 Apps 脚本项目作为库导入另一个项目的情况,在这种情况下,您在设置时分配 LibraryName。如果类是在同一个项目中定义的(不管 .gs 文件如何),您只需直接使用类名,如我上面的示例所示。这是有关库的文档:developers.google.com/apps-script/guides/libraries
    • @CameronRoberts:由于使用了 Chrome v8,您现在可以在 Google 应用脚本中使用类:developers.google.com/apps-script/guides/v8-runtime
    【解决方案2】:

    TypeScript 现在可以与 GAS 一起使用。要使用它,请使用 clasp 下载脚本文件,然后通过将文件后缀更改为 .ts 将它们转换为 TypeScript。更多信息可以在https://developers.google.com/apps-script/guides/typescript找到。完成此操作后,即可使用class

    可以在https://github.com/november-yankee/science-test-grading 找到用于实现 Google 表格自定义功能的 TypeScript 示例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-17
      • 1970-01-01
      相关资源
      最近更新 更多