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