イテラブルなオブジェクトを作成してfor...of、for...inで動かす
イテラブルなオブジェクトを作成してfor...of、for...inで動かす:
JavaScriptはイテラブルであるプロトコルが存在する
反復処理プロトコル|MDN
JavaScriptはイテラブルであるプロトコルが存在する
反復処理プロトコル|MDN
JavaScriptのイテラブルなオブジェクトを作ってみた
- キー(Symbol.iterator)にnext関数をもつオブジェクトを登録しておく。
- 常にobjを参照するように
that = this
としておく。 - next関数を実行するたびに要素を1つずつ進める。
- 途中の要素の場合は
{ value: val, done: false }
を返す。 - 最後の要素が来たら
{ done: true}
を返す。
var iterator = function () { var current = 0 var keys = Object.keys(this) var that = this // objectに登録するとthat var iterator = { next() { if (current < keys.length) { var result = { value: that[keys[current]], done: false } current++; return result } else { return { done: true } } } } return iterator } var obj = { a: 1, b: 2 } obj[Symbol.iterator] = iterator;//iterableにする for (let val of obj) { console.log(val)// 1, 2 } for (let key in obj) { console.log(key)// a, b }
コメント
コメントを投稿