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 相关文章推荐
IE php关于强制下载文件的代码
Aug 23 Javascript
25个好玩的JavaScript小游戏分享
Apr 22 Javascript
javascript搜索框效果实现方法
May 14 Javascript
JS+CSS实现简易的滑动门效果代码
Sep 24 Javascript
JS实现的简单鼠标跟随DiV层效果完整实例
Oct 31 Javascript
AngularJS 中的指令实践开发指南(一)
Mar 20 Javascript
深入理解vue2.0路由如何配置问题
Jul 18 Javascript
js仿微信抢红包功能
Sep 25 Javascript
prototype.js简单实现ajax功能示例
Oct 18 Javascript
javascript 通过键名获取键盘的keyCode方法
Dec 31 Javascript
详解React项目中碰到的IE问题
Mar 14 Javascript
详解React服务端渲染从入门到精通
Mar 28 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的论坛(5)
2006/10/09 PHP
PHP 采集程序原理分析篇
2010/03/05 PHP
PHP学习散记_编码(json_encode 中文不显示)
2011/11/10 PHP
PHP实现文件下载断点续传详解
2014/10/15 PHP
php采用curl模仿登录人人网发布动态的方法
2014/11/07 PHP
PHP实现导出excel数据的类库用法示例
2016/10/15 PHP
Laravel构建即时应用的一种实现方法详解
2017/08/31 PHP
PHP实现的基于单向链表解决约瑟夫环问题示例
2017/09/30 PHP
Query中click(),bind(),live(),delegate()的区别
2013/11/19 Javascript
JavaScript实现彩虹文字效果的方法
2015/04/16 Javascript
学习JavaScript设计模式之观察者模式
2020/04/22 Javascript
javascript之Boolean类型对象
2016/06/07 Javascript
js实现自定义路由
2017/02/04 Javascript
利用JS代码自动删除稿件的普通弹幕功能
2019/09/20 Javascript
微信小程序实现禁止分享代码实例
2019/10/19 Javascript
JS数组的高级使用方法示例小结
2020/03/14 Javascript
Vue发布订阅模式实现过程图解
2020/04/30 Javascript
python将html转成PDF的实现代码(包含中文)
2013/03/04 Python
介绍Python中几个常用的类方法
2015/04/08 Python
Python实现求最大公约数及判断素数的方法
2015/05/26 Python
windows下python之mysqldb模块安装方法
2017/09/07 Python
python with提前退出遇到的坑与解决方案
2018/01/05 Python
处理python中多线程与多进程中的数据共享问题
2019/07/28 Python
vscode写python时的代码错误提醒和自动格式化的方法
2020/05/07 Python
python如何实现word批量转HTML
2020/09/30 Python
用CSS3实现Win8风格的方格导航菜单效果
2013/04/10 HTML / CSS
Juicy Couture Beauty官方网站:香水和化妆品
2019/03/12 全球购物
this关键字的作用
2016/01/30 面试题
力学专业毕业生自荐信
2013/11/17 职场文书
干部作风建设工作总结
2014/10/29 职场文书
2015年度优秀员工推荐信
2015/03/23 职场文书
2015年仓库工作总结
2015/04/09 职场文书
2016党校培训心得体会
2016/01/07 职场文书
详解nginx进程锁的实现
2021/06/14 Servers
总结高并发下Nginx性能如何优化
2021/11/01 Servers
Pandas搭配lambda组合使用详解
2022/01/22 Python