<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片在线观看播放| 国产亚洲人成网站在线观看| 精品人妻系列无码人妻免费视频| 亚洲一区二区三区无码影院| xxxx日本在线播放免费不卡| 色噜噜AV亚洲色一区二区| 西西人体免费视频| 亚洲av丰满熟妇在线播放| 亚洲免费视频网站| 亚洲色大成网站www永久| 久久不见久久见中文字幕免费| 中文字幕在线日亚洲9| 免费无码一区二区三区蜜桃大| 亚洲乱亚洲乱妇24p| 国产乱子影视频上线免费观看| 五月天婷婷精品免费视频| 亚洲码国产精品高潮在线| 伊人久久免费视频| 亚洲一区二区三区成人网站| 日韩午夜免费视频| 一个人免费观看日本www视频 | 亚洲一区二区三区久久久久| 无人影院手机版在线观看免费 | 四虎www成人影院免费观看| 免费人成大片在线观看播放电影| 亚洲午夜AV无码专区在线播放 | 亚洲精品福利网泷泽萝拉| 免费高清在线影片一区| 一级特黄色毛片免费看| 亚洲第一香蕉视频| 亚洲高清国产拍精品青青草原| 久久青草国产免费观看| 亚洲AV成人无码天堂| 国产亚洲精aa成人网站| 中文字幕乱码免费视频| 一个人看的免费高清视频日本| 亚洲视频免费观看| 免费萌白酱国产一区二区|