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

javascript設(shè)計(jì)模式之迭代器模式

 更新時(shí)間:2022年01月11日 14:27:10   作者:妖怪不慌不張  
這篇文章主要為大家介紹了javascript迭代器模式,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助

迭代器模式介紹

  • 順序訪問(wèn)一個(gè)集合

順序:如數(shù)組、類(lèi)數(shù)組稱(chēng)為順序,而非對(duì)象,能從0,1,2…通過(guò)index訪問(wèn)的值

  • 使用者無(wú)需知道集合的內(nèi)部結(jié)構(gòu)

示例

如果要對(duì)這三個(gè)變量進(jìn)行遍歷,需要寫(xiě)三個(gè)遍歷方法

<p>each1</p>
<p>each2</p>
<p>each3</p>
...
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.js"></script>
<script>
var arr = [1,2,3]
var nodeList = document.getElementsByTagName('p')
var $p = $('p')
// 如果要對(duì)這三個(gè)變量進(jìn)行遍歷,需要寫(xiě)三個(gè)遍歷方法
// 1
arr.forEach(function(item){
	console.log(item)
})
// 2
var i;length = nodeList.length
for(i = 0;i < length;i ++) {
	console.log(nodeList(i))
}
// 3
$p.each(function(key, p){
	console.log(key,p)
})
</script>

如果寫(xiě)成一個(gè)遍歷方法,拿jquery的$.each舉例,則這種方法稱(chēng)為迭代器模式

// 如果寫(xiě)成一個(gè)遍歷方法,拿jquery的$.each舉例,則這種方法稱(chēng)為迭代器模式
var arr = [1,2,3]
var nodeList = document.getElementsByTagName('p')
var $p = $('p')
function each(data){
	var $data = data
	$data.each(function(key, val){
		console.log(key, val)
	})
}
each(arr)
each(nodeList)
each($p)

迭代器模式UML類(lèi)圖

UML類(lèi)圖: 用圖的方式表示各個(gè)類(lèi)所有的屬性及相互之間的引用、繼承關(guān)系

在這里插入圖片描述

迭代器模式原生代碼演示

class Iterator {
    constructor(conatiner) {
        this.list = conatiner.list
        this.index = 0
    }
    next() {
        if (this.hasNext()) {
            return this.list[this.index++]
        }
        return null
    }
    hasNext() {
        if (this.index >= this.list.length) {
            return false
        }
        return true
    }
}
class Container {
    constructor(list) {
        this.list = list
    }
    getIterator() {
        return new Iterator(this)
    }
}
// 測(cè)試代碼
let container = new Container([1, 2, 3, 4, 5])
let iterator = container.getIterator()
while(iterator.hasNext()) {
    console.log(iterator.next())
}

迭代器模式的場(chǎng)景

  • jquery each
  • ES6 Iterator

ES6 語(yǔ)法中,有序集合的數(shù)據(jù)類(lèi)型已經(jīng)有很多,例如

  • Array
  • Map
  • Set
  • String
  • Arguments
  • NodeList
  • 以上數(shù)據(jù)類(lèi)型都有[Symbol.iterator]屬性,Symbol.iterator理解成唯一的key即可,屬性值是一個(gè)函數(shù),執(zhí)行函數(shù)返回一個(gè)迭代器,這個(gè)迭代器就有next方法可順序迭代子元素
  • 通過(guò)Array.prototype[Symbol.iterator]來(lái)測(cè)試迭代器
  • object不是有序集合,可以用Map來(lái)代替

在這里插入圖片描述

ES6 Iterator示例

let arr = [1, 2, 3, 4]
let nodeList = document.getElementsByTagName('p')
let m = new Map()
m.set('a', 100)
m.set('b', 200)
function each(data) {
    // 生成遍歷器
    let iterator = data[Symbol.iterator]()
    let item = {done: false}
    while (!item.done) {
        item = iterator.next()
        if (!item.done) {
            console.log(item.value)
        }
    }
}
each(arr)
each(nodeList)
each(m)

由于Symbol.iterator屬性并不是人所知,同時(shí)并是每次用到它是都需要封裝一個(gè)each方法,因此有了es6新語(yǔ)法for…of語(yǔ)法,以上代碼可以這樣寫(xiě)

function each(data) {
    for (let item of data) {
        console.log(item)
    }
}
each(arr)
each(nodeList)
each(m)

擴(kuò)展

ES6 Iterator與Generator Iterator的價(jià)值不限于上述的幾種類(lèi)型遍歷還有Generator函數(shù)的使用即返回的數(shù)據(jù)只要符合Iterator接口的要求(存在Symbol.iterator屬性),就可以使用Iterator語(yǔ)法,即迭代器模式

在這里插入圖片描述

總結(jié)

本篇文章就到這里了,希望能夠給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • 徹底理解js面向?qū)ο笾^承

    徹底理解js面向?qū)ο笾^承

    這篇文章主要介紹了js面向?qū)ο笾^承的相關(guān)知識(shí),以及分享了讀者弄明白這個(gè)知識(shí)點(diǎn)的學(xué)習(xí)心得,對(duì)此有需要的朋友參考下吧。
    2018-02-02
  • Javascript基礎(chǔ)教程之if條件語(yǔ)句

    Javascript基礎(chǔ)教程之if條件語(yǔ)句

    這篇文章主要介紹了Javascript基礎(chǔ)教程之if條件語(yǔ)句,需要的朋友可以參考下
    2015-01-01
  • javascript 進(jìn)階篇1 正則表達(dá)式,cookie管理,userData

    javascript 進(jìn)階篇1 正則表達(dá)式,cookie管理,userData

    接下來(lái)開(kāi)始我們的進(jìn)階之路,更實(shí)用的技巧分享
    2012-03-03
  • Javascript學(xué)習(xí)筆記3 作用域

    Javascript學(xué)習(xí)筆記3 作用域

    每個(gè)寫(xiě)過(guò)程序的人都不會(huì)對(duì)作用域這個(gè)概念陌生,那在這篇文章中就來(lái)談下Javascript的作用域。
    2010-01-01
  • 使用UglifyJS合并/壓縮JavaScript的方法

    使用UglifyJS合并/壓縮JavaScript的方法

    在UglifyJS入門(mén)中主要記錄了UglifyJS的安裝,配置。篇末在命令行中使用了一個(gè)簡(jiǎn)單命令來(lái)壓縮一個(gè)JS文件。這篇以編程的方式去壓縮JS文件。即寫(xiě)一個(gè)build.js文件,使用node命令執(zhí)行該文件
    2012-03-03
  • 用JavaScript顯示瀏覽器客戶端信息的超相近教程

    用JavaScript顯示瀏覽器客戶端信息的超相近教程

    這篇文章主要介紹了用JavaScript顯示瀏覽器客戶端信息的超相近教程,包含了從返回桌面瀏覽器客戶端內(nèi)核信息到移動(dòng)端瀏覽器以及其使用的系統(tǒng)版本信息等內(nèi)容,傾力推薦!需要的朋友可以參考下
    2015-06-06
  • fetch()函數(shù)說(shuō)明與使用方法詳解

    fetch()函數(shù)說(shuō)明與使用方法詳解

    fetch()是XMLHttpRequest的升級(jí)版,用于在JavaScript腳本里面發(fā)出 HTTP請(qǐng)求,本文章向大家介紹fetch()的用法,主要包括fetch()的用法使用實(shí)例、應(yīng)用技巧、基本知識(shí)點(diǎn)總結(jié)和需要注意事項(xiàng),具有一定的參考價(jià)值,需要的朋友可以參考一下。
    2022-11-11
  • 淺析javascript 定時(shí)器

    淺析javascript 定時(shí)器

    這篇文章主要簡(jiǎn)單介紹了javascript 定時(shí)器的相關(guān)知識(shí),包括 setTimeout()以及clearInterval() 的定義和用法,非常實(shí)用,推薦給大家
    2014-12-12
  • javascript處理表單示例(javascript提交表單)

    javascript處理表單示例(javascript提交表單)

    這篇文章主要介紹了javascript處理表單示例,處理 各種表單, 以及鏈接,按鈕的通用組件,需要的朋友可以參考下
    2014-04-04
  • 薦書(shū)|您有一份JavaScript書(shū)單待簽收

    薦書(shū)|您有一份JavaScript書(shū)單待簽收

    &#8203;學(xué)習(xí)是一個(gè)持續(xù)不斷的過(guò)程,在互聯(lián)網(wǎng)技術(shù)里暢游的程序員們,對(duì)學(xué)習(xí)的渴望更是難以窮盡,下面這篇文章主要給大家分享了關(guān)于Javascript相關(guān)的書(shū)籍,對(duì)大家學(xué)習(xí)Javascript具有一定的參考學(xué)習(xí)價(jià)值,下面來(lái)一起看看吧。
    2017-07-07

最新評(píng)論

南开区| 金沙县| 金乡县| 都兰县| 陇西县| 开封市| 定日县| 罗源县| 绿春县| 临城县| 利津县| 周至县| 松原市| 西峡县| 东平县| 平阴县| 陆河县| 阆中市| 连州市| 鲁山县| 金坛市| 台东县| 托克托县| 衡阳市| 浮梁县| 华安县| 五寨县| 鲁甸县| 中方县| 来安县| 临猗县| 新郑市| 林甸县| 塔城市| 宁陕县| 南召县| 高雄市| 麻城市| 崇礼县| 新余市| 开封县|