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 相关文章推荐
javascript实现的使用方向键控制光标在table单元格中切换
Nov 17 Javascript
js获取浏览器的可视区域尺寸的实现代码
Nov 30 Javascript
jquery获取css中的选择器(实例讲解)
Dec 02 Javascript
js兼容火狐显示上传图片预览效果的方法
May 21 Javascript
跟我学习javascript创建对象(类)的8种方法
Nov 20 Javascript
谈谈我对JavaScript原型和闭包系列理解(随手笔记9)
Dec 24 Javascript
js获取form表单所有数据的简单方法
Aug 18 Javascript
JavaScript用JSONP跨域请求数据实例详解
Jan 06 Javascript
jQuery插件ContextMenu自定义图标
Mar 15 Javascript
jquery自定义显示消息数量
Dec 19 jQuery
小程序实现单选多选功能
Nov 04 Javascript
详解a标签添加onclick事件的几种方式
Mar 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
使用Apache的rewrite技术
2006/06/22 PHP
PHP 使用pcntl和libevent 实现Timer功能
2013/10/27 PHP
ThinkPHP调用百度翻译类实现在线翻译
2014/06/26 PHP
php7安装yar扩展的方法详解
2017/08/03 PHP
新闻内页-JS分页
2006/06/07 Javascript
Javascript跨域请求的4种解决方式
2013/03/17 Javascript
javascript 循环调用示例介绍
2013/11/20 Javascript
将list转换为json失败的原因
2013/12/17 Javascript
使用百度地图api实现根据地址查询经纬度
2014/12/11 Javascript
JS动态改变浏览器标题的方法
2016/04/06 Javascript
Web 开发中Ajax的Session 超时处理方法
2017/01/19 Javascript
javascript中apply/call和bind的使用
2017/02/15 Javascript
JavaScript实现反转字符串的方法详解
2017/04/27 Javascript
AngularJS select加载数据选中默认值的方法
2018/02/28 Javascript
详解javascript void(0)
2020/07/13 Javascript
javascript的hashCode函数实现代码小结
2020/08/11 Javascript
[02:37]2015国际邀请赛选手档案—LGD.Xiao8
2015/07/28 DOTA
详解Python的Twisted框架中reactor事件管理器的用法
2016/05/25 Python
Python实现网络端口转发和重定向的方法
2016/09/19 Python
python+unittest+requests实现接口自动化的方法
2018/11/29 Python
对python同一个文件夹里面不同.py文件的交叉引用方法详解
2018/12/15 Python
python爬虫之遍历单个域名
2019/11/20 Python
在python中利用pycharm自定义代码块教程(三步搞定)
2020/04/15 Python
opencv 图像礼帽和图像黑帽的实现
2020/07/07 Python
国际领先的学术出版商:Springer
2017/01/11 全球购物
亚洲航空公司官方网站:AirAsia
2019/11/25 全球购物
高中生毕业自我鉴定
2013/10/10 职场文书
物业电工岗位职责
2013/11/20 职场文书
网络专业学生个人的自我评价
2013/12/16 职场文书
《东方明珠》教学反思
2014/04/20 职场文书
人力资源管理毕业生自荐信
2014/06/26 职场文书
会议开幕词
2015/01/28 职场文书
党组织结对共建协议书
2016/03/23 职场文书
Python使用sql语句对mysql数据库多条件模糊查询的思路详解
2021/04/12 Python
MyBatis自定义SQL拦截器示例详解
2021/10/24 Java/Android
sql server偶发出现死锁的解决方法
2022/04/10 SQL Server