Различные реализации одного и того же конструктора объектов не работают со скриптом Google - PullRequest
0 голосов
/ 23 марта 2019

У меня есть этот конструктор объекта:

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

Но я не могу понять, почему мой код не запускается, когда я пытаюсь напрямую определить linksObject внутри моей функции linksDocument ().

// 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.

  • в любом случае я определяю ссылки только один раз, но в разных местах.

1 Ответ

0 голосов
/ 23 марта 2019

Прочитав первоначальные комментарии, я пришел к выводу, что проблема заключалась в моей интерпретации глобальной / локальной области видимости.

После определения моего объекта внутри linksDocument () и передачи объекта в качестве параметра для обеих функций, которые его используют (setMainFolderLink () и setSubFoldersLinks (14)), он работает просто отлично.

Окончательный код - это что-то в этих строках:

// generates links document
function linksDocument() {
  ...
  var linksObject = new createLinksObject(getParentFolderID());
  setMainFolderLink(linksObject);
  setSubFoldersLinks(14, linksObject);
  ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...