js裡的迭代器模式
阿新 • • 發佈:2021-07-13
迭代器模式
迭代器模式的定義:提供一個方法順序訪問一個聚合物件中的各個元素,而又不需要暴露該物件的內部表示
。
簡單來說就是實現對一個物件的迭代。。。
內部迭代器
這在ES6裡已經有了原生的支援:[Symbol.iterator]
,該方法在所有的陣列、Map、Set中都已經有了實現,所以可以通過for...of...
來迭代遍歷這些物件;但是物件裡是沒有內建該方法的,可以通過手動新增迭代器來實現物件的迭代,原理是獲得物件中的所有key,然後挨個查詢key對應的value。
以下是實現一個自帶迭代器的類的程式碼:
class Obj { constructor() { this.a = "a"; this.b = "b"; this.c = "c"; } [Symbol.iterator]() { const keys = Object.keys(this); let count = 0; return { next: () => { return keys[count] ? { done: false, value: this[keys[count++]] } : { done: true, value: undefined }; }, //? 迭代中途退出時使用 return: () => { return { done: true }; }, }; } } const obj = new Obj(); for (const value of obj) { console.log(value); } // a b c
外部迭代器
就是通過一個外部物件來訪問一個物件的屬性,方法與上面的大同小異就不多寫了。