給js對象添加迭代器庶喜,讓對象也可以使用 for...of

幾種for對比

忘了來源哪里泡仗,望指出番甩,侵刪

迭代器

  • 擁有迭代器的對象我們叫做 iterable 索赏,而迭代器叫做 iterator ,這是兩個不同的概念
  • 所有擁有 [Symbol.iterator]() 的對象被稱為可迭代的
  • 原理:
    for-of 循環(huán)首先調(diào)用集合的 [Symbol.iterator]() 方法贴彼,緊接著返回一個新的迭代器對象潜腻。迭代器對象可以是任意具有 next() 方法的對象; for-of 循環(huán)將重復調(diào)用這個方法器仗,每次循環(huán)調(diào)用一次

原理及實現(xiàn)

  1. 給對象添加一個名稱為 Symbol.iterator 的屬性方法融涣。Symbol.iterator 是一個內(nèi)置符號,代表一個迭代器方法精钮。
  2. Symbol.iterator 這個方法必須返回一個迭代器對象威鹿,包含一個 next 方法

    next() 方法每次執(zhí)行都返回一個結果對象,這個對象有兩個屬性:

    • value 轨香,表示將要返回的值忽你;
    • done ,是一個布爾值臂容,表示是否進行下次迭代
  3. 迭代器還會保存一個 內(nèi)部指針 科雳,用來指向當前集合中值的位置,每調(diào)用一次 next() 方法脓杉,都會返回下一個可用的結果對象糟秘。
var obj = { a: 1, b: 2 };

Object.prototype[Symbol.iterator] = function () {
    const keys = Object.keys(this);
    let index = 0;

    return {
        next: () => {
            return {
                value: this[keys[index++]], // 每次迭代的結果
                done: index > keys.length // 迭代結束標識 false停止迭代,true繼續(xù)迭代
            };
        }
    }
}

for (let n of obj) {
    console.log(n);
    /**
     * 1
     * 2
     */
}

參考:

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末球散,一起剝皮案震驚了整個濱河市尿赚,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蕉堰,老刑警劉巖凌净,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異嘁灯,居然都是意外死亡泻蚊,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進店門丑婿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來性雄,“玉大人没卸,你說我怎么就攤上這事∶胄” “怎么了约计?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長迁筛。 經(jīng)常有香客問我煤蚌,道長,這世上最難降的妖魔是什么细卧? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任尉桩,我火速辦了婚禮,結果婚禮上贪庙,老公的妹妹穿的比我還像新娘蜘犁。我一直安慰自己,他們只是感情好止邮,可當我...
    茶點故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布这橙。 她就那樣靜靜地躺著,像睡著了一般导披。 火紅的嫁衣襯著肌膚如雪屈扎。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天撩匕,我揣著相機與錄音鹰晨,去河邊找鬼。 笑死止毕,一個胖子當著我的面吹牛并村,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播滓技,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼哩牍,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了令漂?” 一聲冷哼從身側響起膝昆,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎叠必,沒想到半個月后荚孵,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡纬朝,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年收叶,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片共苛。...
    茶點故事閱讀 40,090評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡判没,死狀恐怖蜓萄,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情澄峰,我是刑警寧澤嫉沽,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站俏竞,受9級特大地震影響绸硕,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜魂毁,卻給世界環(huán)境...
    茶點故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一玻佩、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧席楚,春花似錦夺蛇、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽娶聘。三九已至闻镶,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間丸升,已是汗流浹背铆农。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留狡耻,地道東北人墩剖。 一個月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓,卻偏偏與公主長得像夷狰,于是被迫代替她去往敵國和親岭皂。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,033評論 2 355

推薦閱讀更多精彩內(nèi)容