Поведение строки с итерацией - PullRequest
0 голосов
/ 05 декабря 2018
var someString = new String('hi');

someString[Symbol.iterator] = function() {
  return { // this is the iterator object, returning a single element, the string "bye"
    next: function() {
      if (this._first) {
        this._first = false;
        return { value: 'bye', done: false };
      } else {
        return { done: true };
      }
    },
    _first: true
  };
};

Этот код предназначен для механизма поведения итерации строк из MDN, но я не могу понять, как использовать переменную _first, почему она используется и где она объявлена.

1 Ответ

0 голосов
/ 05 декабря 2018

В вашем фрагменте кода объект итератора имеет два свойства:

  • next - функция.
  • _first - логический флаг, который инициализируется как true.

Функция next проверяет _first, проверяет ли это, когда функция вызывается впервые, и соответствующим образом корректирует ее поведение.

Обратите внимание, что внутри *Функция 1015 *, this будет ссылаться на объект итератора и, следовательно, может использоваться для доступа к свойству _first.

...