Prototype源碼淺析——Number部分

來源:互聯網
上載者:User

Prototype在原生對象的基礎上擴充,分別是Object,Function,String,Number,Array,Date,前面分析了Object,Function,String,還剩下Number,Array,Date。

Number部分方法比較少,一共有8個:

    toColorPart: 將 Number 對象轉換為具有兩位元字的十六進位形式
succ: 返回當前 Number 對象的下一個值,即當前值加一
times: 採用 Ruby 的風格來封裝一個標準的 [0...n] 迴圈
toPaddedString:將當前 Number 對象轉換為字串,如果轉換後的字串長度小於 length 指定的值,則用 0 在左邊補足其餘的位元
abs: 返回當前 Number 對象的絕對值。
round: 返回當前 Number 對象四捨五入後的整數值。
ceil: 返回大於等於當前 Number 對象的最小整數值。
floor: 返回小於等於當前 Number 對象的最大整數值。

其中一個重要的方法是toPaddedString。Number對象重寫了toString方法:

NumberObject.toString(radix)
參數 描述
radix 可選。規定表示數位基數,使 2 ~ 36 之間的整數。若省略該參數,則使用基數 10。但是要注意,如果該參數是 10 以外的其他值,則 ECMAScript 標準允許實現返回任意值。
        function toPaddedString(length,radix){
var string = this.toString(radix || 10);//先將數字轉換成相應的進位
return '0'.times(length - string.length) + string;//times方法在String中擴充的,將一個字元重複n遍
}

有了這個方法,就有一個比較有用的延伸就是toColorPart,可用於CSS中的色彩轉換:

  function toColorPart() {
return this.toPaddedString(2, 16);
}

既然是CSS色彩轉換,因此數字就要求在[0-255]範圍內。

console.log((10).toColorPart());//0a

有一個和String中同名的方法succ,作用也差不多,String中是按照字元表來遞加的,Number中是按照自然數的順序來的。

        function succ() {
return this + 1;
}
console.log((10).succ());//11

從這個方法出發,來一個簡單的0-n的數組

        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函數來得到times函數:

        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的靜態方法擴充到Number對象上【說法不準確,意會··=。=】

  function abs() {
return Math.abs(this);
}
function round() {
return Math.round(this);
}
function ceil() {
return Math.ceil(this);
}
function floor() {
return Math.floor(this);
}

 

轉載請註明來自小西山子【http://www.cnblogs.com/xesam/】
本文地址:http://www.cnblogs.com/xesam/archive/2012/01/14/2322558.html

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.