国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

Prototype源碼淺析 String部分(一)之有關indexOf優化

2024-05-06 14:22:36
字體:
來源:轉載
供稿:網友

添加到String.prototype中的方法比較多,不過歸結起來,大致分為下面幾類:

分類方法名 
原始能力增強              strip |  include  |  startsWith  |  endsWith |  empty |  blank
格式camelize | capitalize |  underscore |  dasherize  | inspect          
變形toArray |  succ  | times
替換interpolate  | sub |  scan |  truncate | gsub
HTML處理stripTags  | escapeHTML |  unescapeHTML
參數序列化toQueryParams
JSON處理unfilterJSON |  isJSON |  evalJSON |  parseJSON
腳本處理stripScripts |  extractScripts  | evalScripts

從基本的原始能力增強開始,下面是具體的實現,這一段很好理解的:
代碼如下:
(function(s){
function strip(){
return this.replace(/^/s+/,'').replace(//s+$/,'');
}
function include(pattern){
return this.indexOf(pattern) > -1;//split
}
function startsWith(pattern) {
return this.lastIndexOf(pattern, 0) === 0;
}
function endsWith(pattern) {
var d = this.length - pattern.length;
return d >= 0 && this.indexOf(pattern, d) === d;
}
function empty() {
return this == '';
}
function blank() {
return /^/s*$/.test(this);
}
s.strip = String.prototype.trim || strip;
s.include = include;
s.startsWith = startsWith;
s.endsWith = endsWith;
s.empty = empty;
s.blank = blank;
})(String.prototype);

上面的strip在jquery里面是$.trim,而且大部分貌似都是trim。這里直接擴展原生原型的悲劇之處就顯現出來了,因為后面的JS實現中(比如chrome)就實現了trim方法,那就弄巧成拙了。
代碼如下:
function strip(){
return this.replace(/^/s+/,'').replace(//s+$/,'');
}

這里面的replace(/^/s+/,'')就是trimLeft,replace(//s+$/,'')是trimRight,不過Prototype.String中沒有這兩個方法。

下面是這一部分比較有意思的地方:

當時看這段的時候,對其中的startsWith和endsWith甚是不解,按理來說,startsWith用indexOf就可以了,這里卻是用的lastIndexOf。后來去翻了一下Prototype1.6版本的實現:
代碼如下:
function startsWith(pattern) {
return this.indexOf(pattern) === 0;
}

function endsWith(pattern) {
var d = this.length - pattern.length;
return d >= 0 && this.lastIndexOf(pattern) === d;
}

可見,以前版本中startsWith用的就是indexOf,不過1.7版本修改了startsWith的實現。在1.7版本中:

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 江西省| 维西| 阿巴嘎旗| 裕民县| 白山市| 张掖市| 余干县| 皋兰县| 马鞍山市| 类乌齐县| 读书| 安泽县| 常山县| 临清市| 平舆县| 沾化县| 湾仔区| 体育| 双柏县| 谷城县| 凌海市| 玉树县| 长兴县| 苗栗市| 泗水县| 喀什市| 建瓯市| 攀枝花市| 正镶白旗| 东源县| 大埔区| 伊金霍洛旗| 德安县| 汝州市| 会同县| 泰安市| 博湖县| 炎陵县| 枞阳县| 延寿县| 景洪市|