最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解如何優(yōu)雅迭代JavaScript字面對象

 更新時間:2022年05月26日 09:23:01   作者:速凍魚  
迭代是訪問集合元素的一種方法,可以被迭代的對象稱為可迭代對象,下面這篇文章主要給大家介紹了關(guān)于如何優(yōu)雅迭代JavaScript字面對象的相關(guān)資料,需要的朋友可以參考下

為什么要實現(xiàn)自定義迭代器

因為在JavaScript中字面量對象是不支持迭代的

如何實現(xiàn)JavaScript字面量對象迭代

  • 只要正確實現(xiàn)字面對象的Symbol.iterator這個屬性所對應(yīng)的迭代器函數(shù)即可
  • 注意??該迭代器函數(shù)只是一個函數(shù),而不是真正的迭代器
  • 迭代器是一個對象,需要提供next函數(shù)來提供給類似for of forEach這種迭代函數(shù)使用

實現(xiàn)方法

第一種使用比較簡單的遍歷來實現(xiàn)

let obj = {uname: "zhangsan"};
obj[Symbol.iterator] = function () {
  const keys = Object.keys(this);
  let index = 0;
  return {
    next() {
      return {
        value: obj[keys[index++]],
        done: index > keys.length
      }
    }
  };
};

let iterator = obj[Symbol.iterator]();

console.log(iterator.next());
//{value: 'zhangsan', done: false}

obj.uname='sudongyu'

iterator = obj[Symbol.iterator]();

console.log(iterator.next());
//{value: 'sudongyu', done: false}

第二種使用生成器函數(shù)來實現(xiàn)

/**
 * 將{}對象轉(zhuǎn)換為可迭代對象
 */
function object2iterator(obj){
    obj[Symbol.iterator]=function* () {
        let properties = Object.keys(this);
        for (let i of properties) {
            yield [i, this[i]];
        }
    }
    return obj
}

生成器詳細API 請參考 mdn

解析為什么生成器函數(shù)要這樣設(shè)計

以下純個人理解,如果有歧義就當(dāng)我放屁~ 哈哈哈

  • 迭代器函數(shù)是一個函數(shù),這樣每次調(diào)用都會為將要return的迭代器中的next函數(shù)創(chuàng)建一個全新的詞法作用域
  • 這樣每次在創(chuàng)建新的迭代器時,執(zhí)行iterator.next()的時候就可以利用閉包訪問到屬于自己的外層詞法環(huán)境中的變量,在方法一中也就是能夠從index為0開始迭代
  • 這樣每個獨立的迭代器對象就能相互隔離~

注意??:我還想表達以下幾個觀點:

  • JavaScript中的對象只是數(shù)據(jù)的載體,集合
  • 所以我們不能把對象中的函數(shù)或者屬性作為對象的一部分
  • 對象的屬性和函數(shù)它們只是一個間接的關(guān)系,雖然有點難理解,但是我還是想表達一下這個觀點
  • 打個比方來講,你(對象)身上的錢(屬性或者對象上的函數(shù))只是你作為了它暫時的載體,并不意味著這個錢就屬于你身體的一部分

總結(jié)

到此這篇關(guān)于如何優(yōu)雅迭代JavaScript字面對象的文章就介紹到這了,更多相關(guān)迭代JS字面對象內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 簡述凍結(jié)JS對象方法技術(shù)

    簡述凍結(jié)JS對象方法技術(shù)

    本文主要介紹了凍結(jié)JS對象方法技術(shù),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • js操作iframe兼容各種主流瀏覽器示例代碼

    js操作iframe兼容各種主流瀏覽器示例代碼

    遇到了操作iframe的相關(guān)問題,其實就是在操作iframe內(nèi)部某個窗體時,調(diào)用父窗體的一個函數(shù),下面與大家分享下操作iframe兼容各種瀏覽器的方法
    2013-07-07
  • js中的onchange和onpropertychange (onchange無效的解決方法)

    js中的onchange和onpropertychange (onchange無效的解決方法)

    這篇文章主要介紹了js中的onchange和onpropertychange (onchange無效的解決方法),需要的朋友可以過來參考下,希望對大家有所幫助
    2014-03-03
  • 過期軟件破解辦法實例詳解

    過期軟件破解辦法實例詳解

    這篇文章主要介紹了過期軟件破解辦法實例詳解的相關(guān)資料,5行腳本代碼即可改變軟件期限,具有參考價值,其他軟件可參考此方法,需要的朋友可以參考下
    2017-01-01
  • JS實現(xiàn)動態(tài)增加和刪除li標(biāo)簽行的實例代碼

    JS實現(xiàn)動態(tài)增加和刪除li標(biāo)簽行的實例代碼

    下面小編就為大家?guī)硪黄狫S實現(xiàn)動態(tài)增加和刪除li標(biāo)簽行的實例代碼。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-10-10
  • IE6彈出“已終止操作”的解決辦法

    IE6彈出“已終止操作”的解決辦法

    導(dǎo)致這個問題產(chǎn)生的原因,一般是因為js(一個比較復(fù)雜的js)寫在body里面,在body元素加載完之前調(diào)用出現(xiàn)問題。顯然,解決該問題的方法就是將這一段js放在body元素解析完畢之后。
    2010-11-11
  • 在JavaScript中生成不可修改屬性對象的方法

    在JavaScript中生成不可修改屬性對象的方法

    這篇文章主要介紹了在 JavaScript 中生成不可修改屬性對象的方法,包括相關(guān)函數(shù)及原理,并列舉了在狀態(tài)管理、數(shù)據(jù)緩存、函數(shù)式編程等場景中的實際應(yīng)用,還通過代碼示例進行了詳細說明,需要的朋友可以參考下
    2024-12-12
  • 詳解webpack介紹&安裝&常用命令

    詳解webpack介紹&安裝&常用命令

    本篇文章主要介紹了詳解webpack介紹&安裝&常用命令,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • 解決微信授權(quán)成功后點擊按返回鍵出現(xiàn)空白頁和報錯的問題

    解決微信授權(quán)成功后點擊按返回鍵出現(xiàn)空白頁和報錯的問題

    這篇文章主要介紹了解決微信授權(quán)成功后點擊按返回鍵出現(xiàn)空白頁和報錯的問題,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • 生成html靜態(tài)文件后的分頁(客戶端版)

    生成html靜態(tài)文件后的分頁(客戶端版)

    生成html靜態(tài)文件后的分頁(客戶端版)...
    2006-07-07

最新評論

田阳县| 吉林市| 永定县| 深州市| 博客| 汪清县| 田林县| 伊宁县| 孟津县| 洛浦县| 博乐市| 磴口县| 龙南县| 鄂州市| 蕉岭县| 新田县| 漯河市| 如东县| 正镶白旗| 荆门市| 石狮市| 泰兴市| 上栗县| 河曲县| 读书| 色达县| 武冈市| 东丰县| 廊坊市| 百色市| 安吉县| 哈巴河县| 临西县| 天峨县| 泉州市| 宁陕县| 周宁县| 渭南市| 海安县| 墨竹工卡县| 广东省|