首页 > 解决方案 > 同一对象构造函数的不同实现不适用于谷歌脚本

问题描述

我有这个对象构造函数:

// 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");
}

笔记:

标签: javascriptgoogle-apps-script

解决方案


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

在 linksDocument() 中定义我的对象并将对象作为参数传递给使用它的两个函数(setMainFolderLink() 和 setSubFoldersLinks(14))后,它工作得很好。

最终代码在以下几行中:

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

推荐阅读