同一对象构造函数的不同实现无法与Google脚本一起使用

时间:2019-03-22 22:30:41

标签: javascript google-apps-script

我有这个对象构造函数:

// links object creator
function createLinksObject(id) {
  //constructor area
  this.mainFolderId = id;
  this.mainFolder = DriveApp.getFolderById(id);
  this.mainFolderName = this.mainFolder.getName();
  this.mainFolderLink = this.mainFolder.getUrl();
  this.subFoldersArray = [];
  // function calling area
  addSubFolders(this.mainFolder, this.subFoldersArray);
  sortArray(this.subFoldersArray);
}

哪个可以正确实现此实现?

var linksObject;

// generates links document
function linksDocument() {
  if (!showDevAlert("LINKS - HAHNE")) {
    return;
  }
  setTextStyle("A1:Z1000", "arial", 14, "center", "middle");
  createsHeaders("", "", "", "", "R00");
  setTitle("LINKS");
  linksObject = new createLinksObject(getParentFolderID());
  setMainFolderLink();
  setSubFoldersLinks(14);
  renameSheet("LINKS");
}

但是当我尝试在linksDocument()函数中直接定义linksObject时,为什么我的代码无法运行。

// generates links document
function linksDocument() {
  if (!showDevAlert("LINKS - HAHNE")) {
    return;
  }
  setTextStyle("A1:Z1000", "arial", 14, "center", "middle");
  createsHeaders("", "", "", "", "R00");
  setTitle("LINKS");
  var linksObject = new createLinksObject(getParentFolderID());
  setMainFolderLink();
  setSubFoldersLinks(14);
  renameSheet("LINKS");
}

或者当我尝试在函数之外完全定义它时。

var linksObject = new createLinksObject(getParentFolderID());

// generates links document
function linksDocument() {
  if (!showDevAlert("LINKS - HAHNE")) {
    return;
  }
  setTextStyle("A1:Z1000", "arial", 14, "center", "middle");
  createsHeaders("", "", "", "", "R00");
  setTitle("LINKS");
  setMainFolderLink();
  setSubFoldersLinks(14);
  renameSheet("LINKS");
}

注意:

  • setMainFolderLink()和setSubFoldersLinks(14)是仅有的两个函数 将使用对象linksObject。

  • 无论如何,我只定义一次linksObject,但是在不同的地方。

1 个答案:

答案 0 :(得分:0)

在阅读了最初的评论之后,我得出的结论是问题在于我对全局/局部范围的解释。

在linksDocument()中定义我的对象并将该对象作为使用它的两个函数(setMainFolderLink()和setSubFoldersLinks(14))的参数传递后,它就可以正常工作。

以下几行是最终代码:

// generates links document
function linksDocument() {
  ...
  var linksObject = new createLinksObject(getParentFolderID());
  setMainFolderLink(linksObject);
  setSubFoldersLinks(14, linksObject);
  ...
}