[转帖]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']);
对数字类型的扩展实现
将很多跟数字有关的运算建立快捷方式,比如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']);

浙公网安备 33010602011771号