Prototype prov " /> 成年女人免费播放影院,亚洲人成77777,久久精品视频91

天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

Prototype ObjectRange對(duì)象學(xué)習(xí)

Ranges represent an interval of values. The value type just needs to be “compatible,” that is, to implement a succ method letting us step from one value to the next (its successor).

Prototype provides such a method for Number and String, but you are of course welcome to implement useful semantics in your own objects, in order to enable ranges based on them.

ObjectRange對(duì)象基本就是實(shí)現(xiàn)了連續(xù)的數(shù)字或者字符串,其中只包含一個(gè)方法,include,判斷某個(gè)數(shù)字或者字符串是否在ObjectRange里。并且ObjectRange對(duì)象還混入了Enumerable的方法,所以可以直接在ObjectRange對(duì)象上調(diào)用Enumerable對(duì)象里面的方法。
復(fù)制代碼 代碼如下:
//創(chuàng)建ObjectRange的便捷方法
function $R(start, end, exclusive) {
return new ObjectRange(start, end, exclusive);
}

//創(chuàng)建ObjectRange對(duì)象并且繼承自Enumerable
var ObjectRange = Class.create(Enumerable, (function() {
    //初始化方法,exclusive為true時(shí),不包含end數(shù)值,默認(rèn)為undefined也就相當(dāng)于false
function initialize(start, end, exclusive) {
this.start = start;
this.end = end;
this.exclusive = exclusive;
}

//覆蓋Enumerable里面的_each方法,在遍歷ObjectRange對(duì)象時(shí)需要用到此方法
function _each(iterator) {
var value = this.start;
while (this.include(value)) {
iterator(value);
value = value.succ();
}
}

//判斷某個(gè)數(shù)值或者字符串是否包含在ObjectRange對(duì)象里
function include(value) {
if (value < this.start)
return false;
if (this.exclusive)
return value < this.end;
return value <= this.end;
}

return {
initialize: initialize,
_each: _each,
include: include
};
})());

看一下示例,然后在詳細(xì)解釋一些細(xì)節(jié):
復(fù)制代碼 代碼如下:
$A($R('a', 'e'))
// -> ['a', 'b', 'c', 'd', 'e'], no surprise there

//千萬不要嘗試輸出下面返回的結(jié)果,否者將會(huì)造成瀏覽器直接死掉
$A($R('ax', 'ba'))
// -> Ouch! Humongous array, starting as ['ax', 'ay', 'az', 'a{', 'a|', 'a}', 'a~'...]

這里說一下$A($R('a', 'e')),如何返回值。首先看$A方法,前面的文章【Prototype 學(xué)習(xí)――工具函數(shù)學(xué)習(xí)($A方法)】中已經(jīng)詳細(xì)講解了$A方法,不知道請(qǐng)自行參考。在$A方法里面有這樣一句:if ('toArray' in Object(iterable)) return iterable.toArray();我們知道,ObjectRange里面混入了Enumerable里面的方法,也就是說間接實(shí)現(xiàn)了toArray方法,那么看一下Enumerable里面的toArray方法:
復(fù)制代碼 代碼如下:
function toArray() {
return this.map();
}

//======> this.map()

//我們注意到在返回的時(shí)候map方法被映射到了collect方法
return {
//...
collect: collect,
map: collect,
//...
}

//======> collect()

//在本例中這個(gè)方法其實(shí)就相當(dāng)于返回一個(gè)數(shù)組,因?yàn)閭鬟M(jìn)來的參數(shù)都是undefined。這里面有一個(gè)this.each方法,繼續(xù)查看
function collect(iterator, context) {
iterator = iterator || Prototype.K;
var results = [];
this.each(function(value, index) {
results.push(iterator.call(context, value, index));
});
return results;
}

//======> this.each()

//終于看到this._each了,現(xiàn)在明白為什么ObjectRange里面會(huì)重寫了_each方法了吧。在遍歷的時(shí)候要用到這個(gè)方法
function each(iterator, context) {
var index = 0;
try {
this._each(function(value) {
iterator.call(context, value, index++);
});
} catch (e) {
if (e != $break) throw e;
}
return this;
}

//======> this._each()

//詳細(xì)說明一下this._each()
//關(guān)鍵就是succ()這個(gè)方法,因?yàn)開each里面使用這個(gè)方法產(chǎn)生下一個(gè)數(shù)值。
//這個(gè)succ()在哪里呢?在Number.prototype和String.prototype里面定義了這個(gè)方法
function _each(iterator) {
var value = this.start;
while (this.include(value)) {
iterator(value);
value = value.succ();
}
}

//下面兩個(gè)方法我就不講了吧。

//======> String.prototype.succ()

function succ() {
return this.slice(0, this.length - 1) +
String.fromCharCode(this.charCodeAt(this.length - 1) + 1);
}

//======> Number.prototype.succ()

function succ() {
return this + 1;
}

//綜上所述,如果你自己想定義其它類型的ObjectRange對(duì)象,譬如Date類型,那么你就要自己實(shí)現(xiàn)succ()方法,用來生成連續(xù)的對(duì)象

上面的流程將清楚了,但一些函數(shù)沒有仔細(xì)講,等講到這些對(duì)象的時(shí)候在仔細(xì)說明里面的函數(shù)。下面看幾個(gè)include的示例吧:
復(fù)制代碼 代碼如下:
$R(1, 10).include(5)
// -> true
$R('a', 'h').include('x')
// -> false
$R(1, 10).include(10)
// -> true
$R(1, 10, true).include(10)
// -> false

JavaScript技術(shù)Prototype ObjectRange對(duì)象學(xué)習(xí),轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 欧美日韩一级黄色片 | 色即是空之甜性涩爱 | 亚洲午夜精品久久久久久抢 | 国产精品久久人妻无码蜜 | 亚洲国产免费观看视频 | 三级成人电彭 | 欧美三级在线完整版免费 | YY600800新视觉理论私人 | 亚洲 日韩 国产 中文视频 | 国产欧美日韩网站 | 四房色播手机版 | 高清bblxx手机在线观看 | 久久精品天天中文字幕 | 亚洲区视频| 处xxxx.88| 麻豆成人啪啪色婷婷久久 | 97在线看视频福利免费 | 日日夜夜影院在线播放 | 超碰97 总站 中文字幕 | 久9青青cao精品视频在线 | 国产无遮挡无码视频在线观看不卡 | 如懿传免费观看在线全集 | 小寡妇好紧进去了好大看视频 | 国产美女又黄又爽又色视频网站 | 国产精品久久久久久免费字体 | 国产精品成人无码免费视频 | 挺进老师的紧窄小肉六电影完整版 | 亚洲免费国产在线日韩 | 精品在线观看一区 | 国产中文欧美日韩在线 | 国内精品免费久久影院 | 久久国产乱子伦精品免费M 久久国产露脸老熟女熟69 | 成人影院久久久久久影院 | 一区视频免费观看 | 国产美女一区二区 | 日本漫画之无彩翼漫画 | 国产成人免费高清在线观看 | 男人脱女人衣服吃奶视频 | 蜜芽亚洲欧美一区二区电影 | 欧美精品专区免费观看 | 国产成A人片在线观看 |