[转帖]Mootools源码分析-09 -- Number

原帖地址:http://space.flash8.net/space/?uid-18713-action-viewspace-itemid-401311

原作者:我佛山人

 

/*
对数字类型的扩展实现
将很多跟数字有关的运算建立快捷方式,比如Math的所有方法
*/
Number.implement({
    
//限制
    limit: function(min, max)    {
        
//注意取最大值和取最小值的顺序和输入值
        return Math.min(max, Math.max(min, this));
    },

    
/*
    四啥五入,本方法是为了解决JS的浮点运算问题
    先根据运算要求的精度放大,使小数点右移,使用Math.round之后再使小数点右移
    所以不直接使用Math.round
    
*/
    round: 
function(precision)    {
        precision 
= Math.pow(10, precision || 0);
        
return Math.round(this * precision) / precision;
    },

    
//Ruby way的方法,表示迭代次数
    times: function(fn, bind)    {
        
for (var i = 0; i < this; i++)    fn.call(bind, i, this);
    },

    
//parseFloat的快捷方式
    toFloat: function()    {
        
return parseFloat(this);
    },

    
//parseInt的快捷方式
    toInt: function(base)    {
        
return parseInt(this, base || 10);
    }

});

//为times方法建立名为each的别名
Number.alias('times''each');

//为数字类型建立到Math对象方法的快捷方式
(function(math)    {
    
var methods = {};
    math.each(
function(name)    {
        
if (!Number[name]) methods[name] = function()    {
            
return Math[name].apply(null, [this].concat($A(arguments)));
        };
    });
    Number.implement(methods);
})([
'abs''acos''asin''atan''atan2''ceil''cos''exp''floor''log''max''min''pow''sin''sqrt''tan']);

 

posted @ 2009-10-28 09:33  webgis松鼠  阅读(121)  评论(0)    收藏  举报