Prototype源碼淺析 Number部分
更新時(shí)間:2012年01月16日 00:22:55 作者:
Prototype在原生對(duì)象的基礎(chǔ)上擴(kuò)展,分別是Object,F(xiàn)unction,String,Number,Array,Date,前面分析了Object,F(xiàn)unction,String,還剩下Number,Array,Date
Number部分方法比較少,一共有8個(gè):
toColorPart: 將 Number 對(duì)象轉(zhuǎn)換為具有兩位數(shù)字的十六進(jìn)制形式
succ: 返回當(dāng)前 Number 對(duì)象的下一個(gè)值,即當(dāng)前值加一
times: 采用 Ruby 的風(fēng)格來(lái)封裝一個(gè)標(biāo)準(zhǔn)的 [0...n] 循環(huán)
toPaddedString:將當(dāng)前 Number 對(duì)象轉(zhuǎn)換為字符串,如果轉(zhuǎn)換后的字符串長(zhǎng)度小于 length 指定的值,則用 0 在左邊補(bǔ)足其余的位數(shù)
abs: 返回當(dāng)前 Number 對(duì)象的絕對(duì)值。
round: 返回當(dāng)前 Number 對(duì)象四舍五入后的整數(shù)值。
ceil: 返回大于等于當(dāng)前 Number 對(duì)象的最小整數(shù)值。
floor: 返回小于等于當(dāng)前 Number 對(duì)象的最大整數(shù)值。
其中一個(gè)重要的方法是toPaddedString。Number對(duì)象重寫(xiě)了toString方法:
NumberObject.toString(radix)
function toPaddedString(length,radix){
var string = this.toString(radix || 10);//先將數(shù)字轉(zhuǎn)換成相應(yīng)的進(jìn)制
return '0'.times(length - string.length) + string;//times方法在String中擴(kuò)展的,將一個(gè)字符重復(fù)n遍
}
有了這個(gè)方法,就有一個(gè)比較有用的延伸就是toColorPart,可用于CSS中的顏色轉(zhuǎn)換:
function toColorPart() {
return this.toPaddedString(2, 16);
}
既然是CSS顏色轉(zhuǎn)換,因此數(shù)字就要求在[0-255]范圍內(nèi)。
console.log((10).toColorPart());//0a
有一個(gè)和String中同名的方法succ,作用也差不多,String中是按照字符表來(lái)遞加的,Number中是按照自然數(shù)的順序來(lái)的。
function succ() {
return this + 1;
}
console.log((10).succ());//11
從這個(gè)方法出發(fā),來(lái)一個(gè)簡(jiǎn)單的0-n的數(shù)組
function range(){
var ret = [0];
for(var i = 0; i < this - 1; i++){
ret.push(i.succ());
}
return ret;
}
console.log((10).range());//[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
暫時(shí)用這個(gè)range函數(shù)來(lái)得到times函數(shù):
function times(iterator, context){
this.range().forEach(iterator, context);//源碼中使用的是R()方法
return this;
}
var s = '';
(5).times(function(item){
s += item;
});
console.log(s);//01234
除去上面幾個(gè)方法,其他的方法就是將Math的靜態(tài)方法擴(kuò)展到Number對(duì)象上【說(shuō)法不準(zhǔn)確,意會(huì)··=。=】
function abs() {
return Math.abs(this);
}
function round() {
return Math.round(this);
}
function ceil() {
return Math.ceil(this);
}
function floor() {
return Math.floor(this);
}
toColorPart: 將 Number 對(duì)象轉(zhuǎn)換為具有兩位數(shù)字的十六進(jìn)制形式
succ: 返回當(dāng)前 Number 對(duì)象的下一個(gè)值,即當(dāng)前值加一
times: 采用 Ruby 的風(fēng)格來(lái)封裝一個(gè)標(biāo)準(zhǔn)的 [0...n] 循環(huán)
toPaddedString:將當(dāng)前 Number 對(duì)象轉(zhuǎn)換為字符串,如果轉(zhuǎn)換后的字符串長(zhǎng)度小于 length 指定的值,則用 0 在左邊補(bǔ)足其余的位數(shù)
abs: 返回當(dāng)前 Number 對(duì)象的絕對(duì)值。
round: 返回當(dāng)前 Number 對(duì)象四舍五入后的整數(shù)值。
ceil: 返回大于等于當(dāng)前 Number 對(duì)象的最小整數(shù)值。
floor: 返回小于等于當(dāng)前 Number 對(duì)象的最大整數(shù)值。
其中一個(gè)重要的方法是toPaddedString。Number對(duì)象重寫(xiě)了toString方法:
NumberObject.toString(radix)
參數(shù) | 描述 |
---|---|
radix | 可選。規(guī)定表示數(shù)字的基數(shù),使 2 ~ 36 之間的整數(shù)。若省略該參數(shù),則使用基數(shù) 10。但是要注意,如果該參數(shù)是 10 以外的其他值,則 ECMAScript 標(biāo)準(zhǔn)允許實(shí)現(xiàn)返回任意值。 |
復(fù)制代碼 代碼如下:
function toPaddedString(length,radix){
var string = this.toString(radix || 10);//先將數(shù)字轉(zhuǎn)換成相應(yīng)的進(jìn)制
return '0'.times(length - string.length) + string;//times方法在String中擴(kuò)展的,將一個(gè)字符重復(fù)n遍
}
有了這個(gè)方法,就有一個(gè)比較有用的延伸就是toColorPart,可用于CSS中的顏色轉(zhuǎn)換:
復(fù)制代碼 代碼如下:
function toColorPart() {
return this.toPaddedString(2, 16);
}
既然是CSS顏色轉(zhuǎn)換,因此數(shù)字就要求在[0-255]范圍內(nèi)。
console.log((10).toColorPart());//0a
有一個(gè)和String中同名的方法succ,作用也差不多,String中是按照字符表來(lái)遞加的,Number中是按照自然數(shù)的順序來(lái)的。
復(fù)制代碼 代碼如下:
function succ() {
return this + 1;
}
console.log((10).succ());//11
從這個(gè)方法出發(fā),來(lái)一個(gè)簡(jiǎn)單的0-n的數(shù)組
復(fù)制代碼 代碼如下:
function range(){
var ret = [0];
for(var i = 0; i < this - 1; i++){
ret.push(i.succ());
}
return ret;
}
console.log((10).range());//[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
暫時(shí)用這個(gè)range函數(shù)來(lái)得到times函數(shù):
復(fù)制代碼 代碼如下:
function times(iterator, context){
this.range().forEach(iterator, context);//源碼中使用的是R()方法
return this;
}
復(fù)制代碼 代碼如下:
var s = '';
(5).times(function(item){
s += item;
});
console.log(s);//01234
除去上面幾個(gè)方法,其他的方法就是將Math的靜態(tài)方法擴(kuò)展到Number對(duì)象上【說(shuō)法不準(zhǔn)確,意會(huì)··=。=】
復(fù)制代碼 代碼如下:
function abs() {
return Math.abs(this);
}
function round() {
return Math.round(this);
}
function ceil() {
return Math.ceil(this);
}
function floor() {
return Math.floor(this);
}
相關(guān)文章
Prototype Hash對(duì)象 學(xué)習(xí)
這個(gè)對(duì)象相當(dāng)于Java中的HashMap,當(dāng)然了功能沒(méi)HashMap那么強(qiáng)大。提供一直基本的方法,簡(jiǎn)單的方法就不在源碼中注釋了。2009-07-07Prototype 學(xué)習(xí) 工具函數(shù)學(xué)習(xí)($方法)
$方法——被成為瑞士軍刀$方法使用技巧。2009-07-07Prototype Enumerable對(duì)象 學(xué)習(xí)
Enumerable是Prototype框架的基石,而Enumerable不單獨(dú)使用,在Prototype中其它對(duì)象mix了Enumerable里面的方法,這樣就可以在這些對(duì)象上應(yīng)用Enumerable的方法,這樣的對(duì)象有:Array,Hash,ObjectRange,還有一些和DOM,AJAX相關(guān)的對(duì)象。2009-07-07初學(xué)prototype,發(fā)個(gè)JS接受URL參數(shù)的代碼
初學(xué)prototype,發(fā)個(gè)JS接受URL參數(shù)的代碼...2007-01-01Prototype 學(xué)習(xí) 工具函數(shù)學(xué)習(xí)($A方法)
Prototype 學(xué)習(xí) 工具函數(shù)學(xué)習(xí)($A使用方法)2009-07-07初學(xué)prototype,發(fā)個(gè)JS接受URL參數(shù)的代碼
初學(xué)prototype,發(fā)個(gè)JS接受URL參數(shù)的代碼...2007-02-02Prototype 學(xué)習(xí) Prototype對(duì)象
Prototype 學(xué)習(xí) Prototype對(duì)象2009-07-07