Определите поля частного класса с помощью Google Apps Scripts (GAS) V8 - PullRequest
1 голос
/ 10 апреля 2020

С тех пор, как Google представил движок V8, я перенес часть кода на новый движок. ES6 позволяет определять частные классы, но при работе в Google App Script я получаю ошибку.

Пример:

class IncreasingCounter {
  #count = 0;
  get value() {
    console.log('Getting the current value!');
    return this.#count;
  }
  increment() {
    this.#count++;
  }
}

При сохранении файла я получаю следующую ошибку:

Error: Line 2: Unexpected token ILLEGAL (line 5075, file "esprima.browser.js-bundle.js")

Есть предложения о том, как создать класс с частными свойствами в Google Apps Script (движок V8)?

1 Ответ

2 голосов
/ 10 апреля 2020

Спасибо @CertainPerformance за подсказку о WeakMaps.

Изучив немного о WeakMaps и символах, я обнаружил, что решение Symbols более простое и понятное для моего случая.

Итак, В итоге я решил свою проблему следующим образом:

const countSymbol = Symbol('count');

class IncreasingCounter {
  constructor(initialvalue = 0){
    this[countSymbol]=initialvalue;
  }
  get value() {
    return this[countSymbol];
  }
  increment() {
    this[countSymbol]++;
  }
}

function test(){
  let test = new IncreasingCounter(5);

  Logger.log(test.value);

  test.increment();

  console.log(JSON.stringify(test));
}

Как мы можем подтвердить, свойство count не указано в списке и недоступно извне класса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...