Что делает наблюдаемый символ в классе?

#javascript #symbols

#javascript #символы

Вопрос:

Я использую библиотеку, класс которой импортируется из SymbolObservable

 import SymbolObservable from 'symbol-observable';
class Spring {
      [SymbolObservable] = () => {
        return {
          subscribe: observer => {
            function notify(spring) {
              observer.next(spring.getCurrentValue());
            }

            const listener = {
              onSpringActivate: notify,
              onSpringUpdate: notify,
              onSpringAtRest: notify,
            };
            this.addListener(listener);

            return () => this.removeListener(listener);
          },
          [SymbolObservable]() {
            return this;
          },
        };
      };
}
  

Что именно здесь происходит? В документации мало что говорится. Я не вижу ни одного subsrcribe нигде в библиотеке. Что делает [SymbolObservable] = () => {} в классе? Что это делает

   [SymbolObservable]() {
        return this;
   },
  

Ссылка на библиотеку

Комментарии:

1. Как бы то ни было, это пони-заполнение для Symbol.observable . Прокрутка страницы вниз дает некоторое представление о том, что именно Observable такое и почему они полезны.

2. Вы понимаете синтаксис и смущены только семантикой SymbolObservable ?

3. Я только что прочитал о синтаксисе, но я не понимаю, что происходит, когда ` [SymbolObservable] = () => {` определено в классе. И отсутствие подписки где-либо в библиотеке также смущает меня. Я только что добавил ссылку на библиотеку.

4. @raj Что вы подразумеваете под «что происходит»? Это поле класса, создающее функцию arrow для этого свойства в конструкторе. Больше ничего. Аналогично, [SymbolObservable]() { return this; } очевидно, определяет метод с символьным ключом, который возвращает сам экземпляр при вызове. Вы спрашиваете, почему они это делают?

5. @Bergi Ya зачем они это делают? Какова цель SymbolObservable , а не обычного метода класса.