javascript - 预期的标识符、字符串或数字,带 *[Symbol.iterator]

标签 javascript visual-studio iterator

这是我在 jsfiddle 上运行的演示:

class Animal {
    constructor(...names) {
        this.animals = names
    }
    *[Symbol.iterator]() {
        for (let animal of this.animals) {
            yield animal
        }
    }
}
var animals = new Animal('cat', 'dog', 'tiger');
for (let animal of animals) {
    console.log(animal)
}

但是当我在 Visual Studio 中重写它时:

class Animal {
    *[Symbol.iterator]() {

    }
}

我收到此错误消息:

Expected identifier, string or number

1

那么,我的问题:如何解决它?

最佳答案

您无法使用 class 语法定义生成器。这是将您的代码直接转换为实际运行的 ES6。

class Animal {
  constructor(...names) {
    this.animals = names
  }
}

// you could define the generator on the prototype here ...
// but make sure you read the second half of this answer
Animal.prototype[Symbol.iterator] = function* () {
  for (let animal of this.animals) {
    yield animal
  }
}

var animals = new Animal('cat', 'dog', 'tiger');
for (let animal of animals) {
  console.log(animal)
}

// cat
// dog
// tiger

但这并不是你真正应该做的事情。 Symbol.iterator 只需要解析一个可迭代值Array.prototype.values将提供您所需要的东西

class Animal {
  constructor(...names) {
    this.animals = names
  }
  [Symbol.iterator]() {
    return this.animals.values()
  }
}

var animals = new Animal('cat', 'dog', 'tiger');
for (let animal of animals) {
  console.log(animal)
}

// cat
// dog
// tiger

可以将迭代器定义为生成器,就像您在OP中所做的那样,但您必须使用委托(delegate) (yield*)获得您想要的行为 -

class Animal {
  constructor(...names) {
    this.animals = names
  }
  *[Symbol.iterator]() {
    yield* this.animals
  }
}

var animals = new Animal('cat', 'dog', 'tiger');
for (let animal of animals) {
  console.log(animal)
}

// cat
// dog
// tiger

关于javascript - 预期的标识符、字符串或数字,带 *[Symbol.iterator],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38935515/

相关文章:

rust - 如何将动态分配与以迭代器作为参数的方法一起使用?

Python 迭代器——如何在新样式类中动态分配 self.next?

javascript - 事件委托(delegate),Javascript中事件Target的使用

javascript - 使用 moment.js 从两个变量设置日期和时间

database - Visual Studio 数据库版中的循环引用

.net - 在 Visual Studio 的设计模式下启用调试

javascript - 我应该怎么做才能在 Visual Studio 中为我自己的 js 库获取 javascript 智能感知

swift - swift 中的字符串迭代器

javascript - 内容安全政策能否与 Google Analytics 和 AdSense 兼容?

javascript - 从 html 文档调用函数不会生成警报