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 相关文章推荐
无缝滚动js代码通俗易懂(自写)
Jun 19 Javascript
js实现倒计时时钟的示例代码
Dec 17 Javascript
JavaScript中Number.MAX_VALUE属性的使用方法
Jun 04 Javascript
jQuery使用正则表达式替换dom元素标签用法示例
Jan 16 Javascript
javascript九宫格图片随机打乱位置的实现方法
Mar 15 Javascript
Angular实现的简单定时器功能示例
Dec 28 Javascript
vue2.0 子组件改变props值,并向父组件传值的方法
Mar 01 Javascript
去掉vue 中的代码规范检测两种方法(Eslint验证)
Mar 21 Javascript
JavaScript查看代码运行效率console.time()与console.timeEnd()用法
Jan 18 Javascript
qrcode生成二维码微信长按无法识别问题的解决
Apr 04 Javascript
详解基于Wepy开发小程序插件(推荐)
Aug 01 Javascript
原生js实现的金山打字小游戏(实例代码详解)
Mar 16 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编程效率的53个要点(经验小结)
2010/09/04 PHP
php获取数组长度的方法(有实例)
2013/10/27 PHP
PHP.ini中配置屏蔽错误信息显示和保存错误日志的例子
2014/05/12 PHP
ajax+php实现无刷新验证手机号的实例
2017/12/22 PHP
Laravel 6 将新增为指定队列任务设置中间件的功能
2019/08/06 PHP
解决laravel(5.5)访问public报错的问题
2019/10/12 PHP
获取网站跟路径的javascript代码(站点及虚拟目录)
2009/10/20 Javascript
基于jquery的表格排序
2010/09/11 Javascript
javascript设计模式之解释器模式详解
2014/06/05 Javascript
完美兼容IE,chrome,ff的设为首页、加入收藏及保存到桌面js代码
2014/12/17 Javascript
javascript实现dom动态创建省市纵向列表菜单的方法
2015/05/14 Javascript
nodejs中全局变量的实例解析
2017/03/07 NodeJs
使用 Node.js 模拟滑动拼图验证码操作的示例代码
2017/11/02 Javascript
element ui分页多选,翻页记忆的实例
2019/09/03 Javascript
如何使用JavaScript检测空闲的浏览器选项卡
2020/05/28 Javascript
vue+node 实现视频在线播放的实例代码
2020/10/19 Javascript
Python运维自动化之nginx配置文件对比操作示例
2018/08/29 Python
Python Series从0开始索引的方法
2018/11/06 Python
python selenium爬取斗鱼所有直播房间信息过程详解
2019/08/09 Python
PyTorch加载预训练模型实例(pretrained)
2020/01/17 Python
Staples加拿大官方网站:办公用品一站式采购
2016/09/25 全球购物
亚马逊加拿大网站:Amazon.ca
2020/01/06 全球购物
说出你对remoting 和webservice的理解和应用
2014/06/08 面试题
单位消防安全制度
2014/01/12 职场文书
历史专业学生的自我评价
2014/02/28 职场文书
信用卡工作证明模板
2014/09/14 职场文书
公司聚餐通知
2015/04/22 职场文书
淮海战役观后感
2015/06/11 职场文书
呐喊读书笔记
2015/06/30 职场文书
寒假生活随笔
2015/08/15 职场文书
2016社区平安家庭事迹材料
2016/02/26 职场文书
css背景和边框标签实例详解
2021/05/21 HTML / CSS
mysql事务对效率的影响分析总结
2021/10/24 MySQL
python脚本框架webpy的url映射详解
2021/11/20 Python
动画电影《龙珠超 超级英雄》延期上映
2022/03/20 日漫
浅谈Redis 中的过期删除策略和内存淘汰机制
2022/04/03 Redis