1. 程式人生 > 其它 >js裡的迭代器模式

js裡的迭代器模式

迭代器模式

迭代器模式的定義:提供一個方法順序訪問一個聚合物件中的各個元素,而又不需要暴露該物件的內部表示

簡單來說就是實現對一個物件的迭代。。。

內部迭代器

這在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

外部迭代器

就是通過一個外部物件來訪問一個物件的屬性,方法與上面的大同小異就不多寫了。