Prototype源码浅析 Number部分


Posted in Javascript onJanuary 16, 2012

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); 
}
Javascript 相关文章推荐
jQuery 文本框得失焦点的简单实例
Feb 19 Javascript
JavaScript中奇葩的假值示例应用
Mar 11 Javascript
AngularJS+Node.js实现在线聊天室
Aug 28 Javascript
Bootstrap精简教程
Nov 27 Javascript
js实现select二级联动下拉菜单
Apr 17 Javascript
使用 jQuery.ajax 上传带文件的表单遇到的问题
Oct 31 Javascript
基于bootstrap-datetimepicker.js不支持IE8的快速解决方法
Nov 07 Javascript
详解AngularJS 路由 resolve用法
Apr 24 Javascript
vue获取dom元素注意事项
Dec 28 Javascript
webpack项目轻松混用css module的方法
Jun 12 Javascript
vue接入腾讯防水墙代码
May 07 Javascript
JavaScript 绘制饼图的示例
Feb 19 Javascript
Prototype源码浅析 String部分(四)之补充
Jan 16 #Javascript
Prototype源码浅析 String部分(二)
Jan 16 #Javascript
深入理解JavaScript系列(11) 执行上下文(Execution Contexts)
Jan 15 #Javascript
深入理解JavaScript系列(10) JavaScript核心(晋级高手必读篇)
Jan 15 #Javascript
深入理解JavaScript系列(9) 根本没有“JSON对象”这回事!
Jan 15 #Javascript
深入理解JavaScript系列(8) S.O.L.I.D五大原则之里氏替换原则LSP
Jan 15 #Javascript
深入理解JavaScript系列(7) S.O.L.I.D五大原则之开闭原则OCP
Jan 15 #Javascript
You might like
Mysql的GROUP_CONCAT()函数使用方法
2008/03/28 PHP
PHP通过引用传递参数用法分析
2016/12/01 PHP
背景音乐每次刷新都可以自动更换
2007/02/01 Javascript
Javascript异步编程模型Promise模式详细介绍
2014/05/08 Javascript
BootStrap智能表单实战系列(三)分块表单配置详解
2016/06/13 Javascript
JavaScript面试题大全(推荐)
2016/09/22 Javascript
完美解决jQuery fancybox ie 无法显示关闭按钮的问题
2016/11/29 Javascript
js闭包用法实例详解
2016/12/13 Javascript
React Native中导航组件react-navigation跨tab路由处理详解
2017/10/31 Javascript
JS引用传递与值传递的区别与用法分析
2018/06/01 Javascript
深入浅析Node环境和浏览器的区别
2018/08/14 Javascript
js+html5 canvas实现ps钢笔抠图
2019/04/28 Javascript
JavaScript封闭函数及常用内置对象示例
2019/05/13 Javascript
深入理解JavaScript 箭头函数
2019/05/30 Javascript
layui 上传文件_批量导入数据UI的方法
2019/09/23 Javascript
JavaScript实现拖拽效果
2020/03/16 Javascript
vue $router和$route的区别详解
2020/12/02 Vue.js
[49:20]2014 DOTA2国际邀请赛中国区预选赛5.21 CIS VS TongFu
2014/05/22 DOTA
[24:42]VP vs TNC Supermajor小组赛B组 BO3 第三场 6.2
2018/06/03 DOTA
[03:12]完美世界DOTA2联赛PWL DAY9集锦
2020/11/10 DOTA
pyqt4教程之实现半透明的天气预报界面示例
2014/03/02 Python
21行Python代码实现拼写检查器
2016/01/25 Python
Django中的Model操作表的实现
2018/07/24 Python
在PyCharm的 Terminal(终端)切换Python版本的方法
2019/08/02 Python
Python基于stuck实现scoket文件传输
2020/04/02 Python
python Tornado框架的使用示例
2020/10/19 Python
pycharm 关闭search everywhere的解决操作
2021/01/15 Python
Carter’s官方旗舰店:美国受欢迎的婴童服装品牌
2018/01/21 全球购物
简述你对Statement,PreparedStatement,CallableStatement的理解
2013/03/25 面试题
Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型
2013/10/30 面试题
物流合作计划书
2014/01/10 职场文书
写求职信有哪些注意事项
2014/05/08 职场文书
大专毕业生自我鉴定范文(2篇)
2014/09/27 职场文书
太空授课观后感
2015/06/17 职场文书
《生物入侵者》教学反思
2016/02/16 职场文书
CSS作用域(样式分割)的使用汇总
2021/11/07 HTML / CSS