可以将自定义类移动到自己的库中吗?

时间:2014-06-29 18:57:18

标签: google-apps-script

我希望能够跨应用程序重用某些功能。在这种情况下,我正在尝试为MongoDb创建一个包装器。所以我创建了以下类:

/** MongoDb
  * Parms
  *   apiKey - This is the api key of the account being used
  *   dbName - This is the name of the database we are connecting to
  */
function MongoDb(apiKey, dbName) {
  this.dbName = dbName;
  this.baseUrl = "https://api.mongolab.com/api/1/databases/"+this.dbName;
  this.options = {
    "contentType":"application/json",
    "method":"get" // default
  };
  this.apiKey = "apiKey="+apiKey;
}

MongoDb.prototype = {
  constructor: MongoDb,
  getCollections: function(dbName) {
    var url = this.baseUrl + "/collections?" + this.apiKey;
    var response = UrlFetchApp.fetch(url, this.options);
    return JSON.parse(response.getContentText());
  }
}

然后我创建了以下函数来测试它:

function test() {
  var db = new MongoDb("xxxxxxxxx", "yyyyyyy");
}

这完全符合预期。所以考虑到成功,我把它移到了自己的库中,现在我的测试脚本给了我错误:TypeError: Imported script is not a function, it is object. (line 2, file "MongoTest")我无法让其他人在我的搜索中收到此错误。

这是不受支持的,还是我应该采取另一种方式?

1 个答案:

答案 0 :(得分:3)

当您将库导入脚本时,您必须为其命名,默认情况下它是库自己的名称。所以,如果你命名了图书馆" MonboDb"你应该这样做:

function test() {
  var db = new MongoDb.MongoDb("xxxxxxxxx", "yyyyyyy");
}

只是为了澄清一下,你可以将这个库(在脚本中导入时)命名为" Lib",然后你就可以了:

function test() {
  var db = new Lib.MongoDb("xxxxxxxxx", "yyyyyyy");
}

结论,将任何代码移动到库中会添加一个新的"命名空间"到代码。这是正确和预期的行为。