• <fieldset id="8imwq"><menu id="8imwq"></menu></fieldset>
  • <bdo id="8imwq"><input id="8imwq"></input></bdo>
    最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
    問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
    當(dāng)前位置: 首頁(yè) - 科技 - 知識(shí)百科 - 正文

    JS中使用變量保存arguments對(duì)象的方法

    來(lái)源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-27 20:27:06
    文檔

    JS中使用變量保存arguments對(duì)象的方法

    JS中使用變量保存arguments對(duì)象的方法:迭代器(iterator)是一個(gè)可以順序存取數(shù)據(jù)集合的對(duì)象。其一個(gè)典型的API是next方法。該方法獲得序列中的下一個(gè)值。迭代器示例題目:希望編寫一個(gè)便利的函數(shù),它可以接收任意數(shù)量的參數(shù),并為這些值建立一個(gè)迭代器。測(cè)試代碼好下:var it=values(,
    推薦度:
    導(dǎo)讀JS中使用變量保存arguments對(duì)象的方法:迭代器(iterator)是一個(gè)可以順序存取數(shù)據(jù)集合的對(duì)象。其一個(gè)典型的API是next方法。該方法獲得序列中的下一個(gè)值。迭代器示例題目:希望編寫一個(gè)便利的函數(shù),它可以接收任意數(shù)量的參數(shù),并為這些值建立一個(gè)迭代器。測(cè)試代碼好下:var it=values(,
    迭代器(iterator)是一個(gè)可以順序存取數(shù)據(jù)集合的對(duì)象。其一個(gè)典型的API是next方法。該方法獲得序列中的下一個(gè)值。

    迭代器示例

    題目:希望編寫一個(gè)便利的函數(shù),它可以接收任意數(shù)量的參數(shù),并為這些值建立一個(gè)迭代器。

    測(cè)試代碼好下:

    var it=values(,,,,,,,,);
    it.next();//
    it.next();//
    it.next();//

    分析:由于values函數(shù)需要接收任意多個(gè)參數(shù),這里就需要用到上一節(jié)講到的構(gòu)建可變參數(shù)的函數(shù)的方法。然后里面的迭代器對(duì)象來(lái)遍歷arguments對(duì)象的元素。

    初步編碼

    function values(){
    var i=,n=arguments.length;
    return {
    hasNext:function(){
    return i<n;
    },
    next:function(){
    if(this.hasNext()){
    return arguments[i++];
    }
    throw new Error("已經(jīng)到達(dá)最后啦");
    }
    }
    }

    用上面的測(cè)試代碼進(jìn)行測(cè)試

    var it=values(,,,,,,,,);
    it.next();//undefined
    it.next();//undefined
    it.next();//undefined

    錯(cuò)誤分析

    代碼運(yùn)行結(jié)果并不正確,下面就對(duì)初始的編碼程序進(jìn)行分析。

    function values(){
    var i=,n=arguments.length;//這里沒有錯(cuò)誤,arguments是values里的內(nèi)置對(duì)象
    return {
    hasNext:function(){
    return i<n;
    },
    next:function(){
    if(this.hasNext()){
    return arguments[i++];//錯(cuò)誤出現(xiàn)在這里,arguments是next方法函數(shù)的內(nèi)置對(duì)象。
    }
    throw new Error("已經(jīng)到達(dá)最后啦");
    }
    }
    }

    這里的指代錯(cuò)誤,很像是另一個(gè)讓人頭痛的對(duì)象this。處理this的指向時(shí),通常是使用變量和保存正確的this。然后在其它地方使用這個(gè)變量。那么arguments對(duì)象的解決方案就出來(lái)了,借助一個(gè)變量來(lái)存儲(chǔ),這樣arguments對(duì)象的指代就沒有問題了。

    再次編碼

    function values(){
    var i=,n=arguments.length,arg=arguments;
    return {
    hasNext:function(){
    return i<n;
    },
    next:function(){
    if(this.hasNext()){
    return arg[i++];
    }
    throw new Error("已經(jīng)到達(dá)最后啦");
    }
    }
    }

    這里的指代錯(cuò)誤,很像是另一個(gè)讓人頭痛的對(duì)象this。處理this的指向時(shí),通常是使用變量和保存正確的this。然后在其它地方使用這個(gè)變量。那么arguments對(duì)象的解決方案就出來(lái)了,借助一個(gè)變量來(lái)存儲(chǔ),這樣arguments對(duì)象的指代就沒有問題了。

    再次編碼

    function values(){
    var i=,n=arguments.length,arg=arguments;
    return {
    hasNext:function(){
    return i<n;
    },
    next:function(){
    if(this.hasNext()){
    return arg[i++];
    }
    throw new Error("已經(jīng)到達(dá)最后啦");
    }
    }
    }

    運(yùn)行測(cè)試代碼

    var it=values(,,,,,,,,);
    it.next();//
    it.next();//
    it.next();//

    結(jié)果和預(yù)期的相同。

    提示

    當(dāng)引用arguments時(shí)當(dāng)心函數(shù)嵌套層級(jí)

    綁定一個(gè)明確作用域的引用到arguments變量,從而可以在嵌套的函數(shù)中引用它

    附錄一:迭代器

    迭代器(iterator)有時(shí)又稱游標(biāo)(cursor)是程序設(shè)計(jì)的軟件設(shè)計(jì)模式,可在容器上遍歷的接口,設(shè)計(jì)人員無(wú)需關(guān)心容器的內(nèi)容。

    迭代器UML類圖

    JS中使用變量保存arguments對(duì)象的方法

    迭代器js實(shí)現(xiàn)

    對(duì)設(shè)計(jì)模式了解一點(diǎn)點(diǎn),但具體項(xiàng)目中,有得多的也就是工廠模式,其它很少用,下面是一個(gè)簡(jiǎn)單的實(shí)現(xiàn),不對(duì)的地方,歡迎交流。

    代碼如下

    function List(){
    this.data=[];
    }
    List.prototype={
    add:function(){
    var args=[].slice.call(arguments)
    this.data=this.data.concat(args); 
    },
    remove:function(i){
    this.data.splice(i,);
    },
    iterator:function(){
    return new Iterator(this);
    }
    }
    function Iterator(list){
    this.list=list;
    this.cur=;
    };
    Iterator.prototype={
    hasNext:function(){
    return this.cur<this.list.data.length-;
    },
    next:function(){
    if(this.hasNext()){
    return this.list.data[this.cur++];
    }
    throw new Error('已經(jīng)到底了~');
    },
    remove:function(){
    this.list.remove(this.cur);
    }
    }
    var list=new List();
    var it=list.iterator();
    list.add(,,,,,,,,);
    it.next();//
    it.next();//
    it.next();//

    以上所述是小編給大家介紹的JS中使用變量保存arguments對(duì)象的方法,希望對(duì)大家有所幫助!

    更多JS中使用變量保存arguments對(duì)象的方法相關(guān)文章請(qǐng)關(guān)注PHP中文網(wǎng)!

    聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文檔

    JS中使用變量保存arguments對(duì)象的方法

    JS中使用變量保存arguments對(duì)象的方法:迭代器(iterator)是一個(gè)可以順序存取數(shù)據(jù)集合的對(duì)象。其一個(gè)典型的API是next方法。該方法獲得序列中的下一個(gè)值。迭代器示例題目:希望編寫一個(gè)便利的函數(shù),它可以接收任意數(shù)量的參數(shù),并為這些值建立一個(gè)迭代器。測(cè)試代碼好下:var it=values(,
    推薦度:
    標(biāo)簽: 保存 使用方法 的方法
    • 熱門焦點(diǎn)

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top
    主站蜘蛛池模板: 日韩精品少妇无码受不了| 精品国际久久久久999波多野| 一区二区日韩国产精品| 99久久精品费精品国产| 久久狠狠高潮亚洲精品| 无码8090精品久久一区| 国产一级精品高清一级毛片| 一级成人精品h| 久久精品男人影院| 2021国产成人精品国产| 久久精品www人人爽人人| 熟妇人妻VA精品中文字幕| 亚洲国产精品一区二区第一页免| 国产精品免费视频观看拍拍| 欧美精品香蕉在线观看网| 国产suv精品一区二区33| 人妻少妇乱子伦精品| 亚洲精品无码成人片在线观看 | laowang在线精品视频| 久久99精品国产麻豆| 久久精品人人做人人妻人人玩| 一本一道精品欧美中文字幕| 一本精品中文字幕在线| 精品无码久久久久久久久久 | 国自产偷精品不卡在线| 国产精品国产亚洲精品看不卡| 国产区精品高清在线观看| 欧美jizzhd精品欧美| 色一乱一伦一图一区二区精品 | 99re8这里有精品热视频免费| 无码精品国产VA在线观看| 久久久久九国产精品| 精品伦精品一区二区三区视频| 国产精品99精品视频网站| 白浆都出来了视频国产精品| mm1313亚洲国产精品无码试看| 99国产精品国产免费观看 | 老司机69精品成免费视频| 久久亚洲欧美日本精品| 亚洲愉拍自拍欧美精品| 99视频在线精品国自产拍亚瑟|