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 相关文章推荐
用tip解决Ext列宽度不够的问题
Dec 13 Javascript
jquery.jstree 增加节点的双击事件代码
Jul 27 Javascript
基于JQuery的动态删除Table表格的行和列的代码
May 12 Javascript
Jquery对数组的操作技巧整理
Mar 25 Javascript
SuperSlide2实现图片滚动特效
Jun 20 Javascript
jQuery 写的简单打字游戏可以提示正确和错误的次数
Jul 01 Javascript
JS+CSS实现弹出全屏灰黑色透明遮罩效果的方法
Dec 20 Javascript
如何解决谷歌浏览器下jquery无法获取图片的尺寸
Sep 10 Javascript
JavaScript实现汉字转换为拼音的库文件示例
Dec 22 Javascript
Vue的百度地图插件尝试使用
Sep 06 Javascript
JavaScript 监听组合按键思路及代码实现
Jul 28 Javascript
TypeScript魔法堂之枚举的超实用手册
Oct 29 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
php需登录的文件上传管理系统
2020/03/21 PHP
在openSUSE42.1下编译安装PHP7 的方法
2015/12/24 PHP
php实现的PDO异常处理操作分析
2018/12/27 PHP
js 键盘记录实现(兼容FireFox和IE)
2010/02/07 Javascript
JavaScript中的类继承
2010/11/25 Javascript
js实现右下角提示框的方法
2015/02/03 Javascript
jquery实现向下滑出的二级导航下滑菜单效果
2015/08/25 Javascript
常见JS验证脚本汇总
2015/12/01 Javascript
使用JavaScript获取URL中的参数(两种方法)
2016/11/16 Javascript
JS数组交集、并集、差集的示例代码
2017/08/23 Javascript
jQuery实现的简单前端搜索功能示例
2017/10/28 jQuery
Vue中computed与methods的区别详解
2018/03/24 Javascript
nodejs 十六进制字符串型数据与btye型数据相互转换
2018/07/30 NodeJs
element-ui中select组件绑定值改变,触发change事件方法
2018/08/24 Javascript
vue-router路由懒加载的实现(解决vue项目首次加载慢)
2018/08/28 Javascript
利用hasOwnProperty给数组去重的面试题分享
2018/11/05 Javascript
python爬虫入门教程--快速理解HTTP协议(一)
2017/05/25 Python
python 内置函数filter
2017/06/01 Python
python微信跳一跳系列之棋子定位像素遍历
2018/02/26 Python
python使用Pandas库提升项目的运行速度过程详解
2019/07/12 Python
django rest framework 实现用户登录认证详解
2019/07/29 Python
详解Python文件修改的两种方式
2019/08/22 Python
基于Tensorflow批量数据的输入实现方式
2020/02/05 Python
python实现图片素描效果
2020/09/26 Python
python爬虫中采集中遇到的问题整理
2020/11/27 Python
请解释接口的显式实现有什么意义
2012/05/26 面试题
造价工程师个人求职信
2013/09/21 职场文书
质检的岗位职责
2013/11/17 职场文书
出纳员岗位职责
2014/03/13 职场文书
会计专业应届生自荐信
2014/06/28 职场文书
2014年教师节座谈会发言稿
2014/09/10 职场文书
教师查摆问题及整改措施
2014/10/11 职场文书
个人作风建设总结
2014/10/23 职场文书
2016秋季田径运动会广播稿
2015/12/21 职场文书
k-means & DBSCAN 总结
2021/04/27 Python
Java后台生成图片的完整步骤
2021/08/04 Java/Android