2016-05-25 72 views
1

對於ES2015 js類,我希望有一個迭代器。所以,我想下面的如何在類中創建迭代器

export default class MyList { 
    iterator*() { 
     // Dummy implementation 
     let counter = 0; 
     while(true) { 
      yield counter++; 
     } 
    } 
} 

因爲我想這樣做

let list = new MyList(); 
    iter = list.iterator(); 

while(!iter.done()) { ... } 

例如。

但是,這不起作用。所以問題是,在類內部實現迭代器的首選方式是什麼?

+1

相關:[有沒有一種方法可以在node.js中指定對象字面值中的ES6生成器方法?](http://stackoverflow.com/q/29750429/1048572) – Bergi

+0

*「但是,這不起作用」 *是一個很差的問題描述。根據接受的答案,你應該得到一個語法錯誤。這是重要的信息! –

+0

錯誤是'SyntaxError:missing:after property id',這對於那些已經處理了一段時間的語言但不適用於新手的人是特別有用的,尤其是因爲避免使用冒號標記來支持縮短的對象方法標記。只是我3美分。 – Azamantes

回答

5

'*'應該在函數名稱之前。像這樣:

export default class MyList { 
    *iterator() { 
     // Dummy implementation 
     let counter = 0; 
     while(true) { 
      yield counter++; 
     } 
    } 
} 

不客氣。