<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題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關鍵字專題關鍵字專題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
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        擴展JavaScript功能的正確方法(譯文)_javascript技巧

        來源:懂視網 責編:小采 時間:2020-11-27 21:02:44
        文檔

        擴展JavaScript功能的正確方法(譯文)_javascript技巧

        擴展JavaScript功能的正確方法(譯文)_javascript技巧:早上看到《JavaScript 每周導讀》【第三期】一文,里面發現一篇文章(Extending JavaScript – The Right Way),覺得還不錯,翻譯過來跟大家共享,本文并不是逐字逐句進行翻譯,盡量說得通俗易懂。 原文地址:Extending JavaScript –
        推薦度:
        導讀擴展JavaScript功能的正確方法(譯文)_javascript技巧:早上看到《JavaScript 每周導讀》【第三期】一文,里面發現一篇文章(Extending JavaScript – The Right Way),覺得還不錯,翻譯過來跟大家共享,本文并不是逐字逐句進行翻譯,盡量說得通俗易懂。 原文地址:Extending JavaScript –

        早上看到《JavaScript 每周導讀》【第三期】一文,里面發現一篇文章(Extending JavaScript – The Right Way),覺得還不錯,翻譯過來跟大家共享,本文并不是逐字逐句進行翻譯,盡量說得通俗易懂。

        原文地址:Extending JavaScript – The Right Way

        以下是譯文

          JavaScript已經內置了很多強大的方法,但有時你需要的某個功能在內置的方法中沒有,我們怎么來優雅地擴展JavaScript功能呢。
          例如我們想增加一個capitalize()方法來實現首字母大寫,通常我們這樣寫:
        代碼如下:
        if(!String.prototype.capitalize)
        {
        String.prototype.capitalize = function()
        {
        return this.slice(0,1).toUpperCase() + this.slice(1).toLowerCase();
        }
        }

          上面的代碼可以正常使用,但如果在某個地方有下面的代碼:
        代碼如下:
        var strings = "yay";
        for(i in strings) console.log(i + ":" + strings[i]);

          我們得到的結果是這樣的:
        0: y
        1: a
        2: y
        capitalize: function () { return this.slice(0, 1).toUpperCase() + this.slice(1).toLowerCase(); }
          這顯然不是我們想要的結果,輸出了我們增加的方法的原因是我們增加的方法的enumerable屬性默認為true。
          我們可以通過簡單地把枚舉屬性(enumerable)設置為false避免這個問題,使用defineProperty方法進行功能的擴展:
        代碼如下:
        if(!String.prototype.capitalize)
        {
        Object.defineProperty(String.prototype, 'capitalize',
        {
        value: function()
        {
        return this.slice(0,1).toUpperCase() + this.slice(1).toLowerCase();
        },
        enumerable: false
        });
        }

          現在我們再運行這段代碼:
        代碼如下:
        var strings = "yay";
        for(i in strings) console.log(i + ":" + strings[i]);

          我們得到的結果是:
        0: y
        1: a
        2: y
          要注意的是,用循環沒有輸出的并不代表不存在,我們可以通過下面的代碼查看到定義:
        代碼如下:
        var strings = "yay";
        console.log(strings.capitalize)

          會輸出:
        代碼如下:
        function () { return this.slice(0, 1).toUpperCase() + this.slice(1).toLowerCase(); }

          用這種方式擴展JavaScript功能比較靈活,我們可以用這種方式來定義我們自己的對象,并設置一些默認值。
          以下是另外幾個擴展方法,你可以在自己的項目中使用:
          String.pxToInt()
          把"200px"這樣的字符串轉換為數字 200 :
        代碼如下:
        if(!String.prototype.pxToInt)
        {
        Object.defineProperty(String.prototype, 'pxToInt',
        {
        value: function()
        {
        return parseInt(this.split('px')[0]);
        },
        enumerable: false
        });
        }

          String.isHex()
          判斷一個字符串是否是16進制表示的,如"#CCC" 或 "#CACACA"
        代碼如下:
        if(!String.prototype.isHex)
        {
        Object.defineProperty(String.prototype, 'isHex',
        {
        value: function()
        {
        return this.substring(0,1) == '#' &&
        (this.length == 4 || this.length == 7) &&
        /^[0-9a-fA-F]+$/.test(this.slice(1));
        },
        enumerable: false
        });
        }

          String.reverse()
          字符串反轉:
        代碼如下:
        if(!String.prototype.reverse)
        {
        Object.defineProperty(String.prototype, 'reverse',
        {
        value: function()
        {
        return this.split( '' ).reverse().join( '' );
        },
        enumerable: false
        });
        }

          String.wordCount()
          統計單詞數量,用空格分開
        代碼如下:
        if(!String.prototype.wordCount)
        {
        Object.defineProperty(String.prototype, 'wordCount',
        {
        value: function()
        {
        return this.split(' ').length;
        },
        enumerable: false
        });
        }

          String.htmlEntities()
          html標簽如<和>編碼為特殊字符
        代碼如下:
        if(!String.prototype.htmlEntities)
        {
        Object.defineProperty(String.prototype, 'htmlEntities',
        {
        value: function()
        {
        return String(this).replace(/&/g, '&').replace(//g, '>').replace(/"/g, '"');
        },
        enumerable: false
        });
        }

          String.stripTags()
          去掉HTML標簽:
        代碼如下:
        if(!String.prototype.stripTags)
        {
        Object.defineProperty(String.prototype, 'stripTags',
        {
        value: function()
        {
        return this.replace(/<\/?[^>]+>/gi, '');
        },
        enumerable: false
        });
        }

          String.trim()
          去掉首尾空格:
        代碼如下:
        if(!String.prototype.trim)
        {
        Object.defineProperty(String.prototype, 'trim',
        {
        value: function()
        {
        return this.replace(/^\s*/, "").replace(/\s*$/, "");
        },
        enumerable: false
        });
        }

          String.stripNonAlpha()
          去掉非字母字符:
        代碼如下:
        if(!String.prototype.stripNonAlpha)
        {
        Object.defineProperty(String.prototype, 'stripNonAlpha',
        {
        value: function()
        {
        return this.replace(/[^A-Za-z ]+/g, "");
        },
        enumerable: false
        });
        }

          Object.sizeof()
          統計對象的大小,如{one: “and”, two: “and”}為2
        代碼如下:
        if(!Object.prototype.sizeof)
        {
        Object.defineProperty(Object.prototype, 'sizeof',
        {
        value: function()
        {
        var counter = 0;
        for(index in this) counter++;
        return counter;
        },
        enumerable: false
        });
        }

          這種方式擴展JS原生對象的功能還是挺不錯的,但除非必要(項目中用的很多),不建議直接在原生對象上擴展功能,會造成全局變量污染。
          另外,文中的pxToInt()方法是沒什么必要的,JS中的parseInt()可以直接完成這樣的功能:parsetInt("200px")===200
          htmlEntities方法貌似有問題,下面另提供一個:
        代碼如下:
        if(!String.prototype.htmlEntities)
        {
        Object.defineProperty(String.prototype, 'htmlEntities',
        {
        value: function()
        {
        var div = document.createElement("div");
        if(div.textContent){
        div.textContent=this;
        }
        else{
        div.innerText=this;
        }
        return div.innerHTML;
        },
        enumerable: false
        });
        }

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        擴展JavaScript功能的正確方法(譯文)_javascript技巧

        擴展JavaScript功能的正確方法(譯文)_javascript技巧:早上看到《JavaScript 每周導讀》【第三期】一文,里面發現一篇文章(Extending JavaScript – The Right Way),覺得還不錯,翻譯過來跟大家共享,本文并不是逐字逐句進行翻譯,盡量說得通俗易懂。 原文地址:Extending JavaScript –
        推薦度:
        標簽: 翻譯 的方法 java
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 亚洲成在人线av| 在线观看国产情趣免费视频| 亚洲色婷婷一区二区三区| igao激情在线视频免费| 亚洲熟伦熟女新五十路熟妇| eeuss免费天堂影院| 久久久久亚洲AV成人网人人网站| 羞羞网站免费观看| 中文字幕精品无码亚洲字 | 国产2021精品视频免费播放| 亚洲色图国产精品| 中国人xxxxx69免费视频| 亚洲国产成人久久精品app| 免费A级毛片无码无遮挡内射| 亚洲看片无码在线视频| 麻豆成人精品国产免费| 一级特级aaaa毛片免费观看 | h视频在线观看免费网站| 亚洲精品456人成在线| 在线精品免费视频无码的| 亚洲国产欧美日韩精品一区二区三区 | 三级毛片在线免费观看| 亚洲AV无码久久精品成人 | 又黄又大的激情视频在线观看免费视频社区在线 | 亚洲男人在线无码视频| 国产成人免费视频| 亚洲国产精品免费观看 | 亚洲国产精品毛片av不卡在线 | 日韩中文字幕精品免费一区| 黑人粗长大战亚洲女2021国产精品成人免费视频 | 亚洲第一页在线视频| 国产免费久久精品久久久| 国产真人无码作爱视频免费| 亚洲沟沟美女亚洲沟沟| 国产免费观看黄AV片| 国产一区二区三区免费| 国产精品亚洲精品青青青| 免费午夜爽爽爽WWW视频十八禁| 精品亚洲永久免费精品| 亚洲中文字幕久久精品蜜桃| 国产亚洲日韩一区二区三区|