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 相关文章推荐
通过 Dom 方法提高 innerHTML 性能
Mar 26 Javascript
jQuery学习笔记[1] jQuery中的DOM操作
Dec 03 Javascript
js取滚动条的尺寸的函数代码
Nov 30 Javascript
getComputedStyle与currentStyle获取样式(style/class)
Mar 19 Javascript
JS 排序输出实现table行号自增前端动态生成的tr
Aug 13 Javascript
理解javascript中Map代替循环
Feb 26 Javascript
Node.js Streams文件读写操作详解
Jul 04 Javascript
Bootstrap Table服务器分页与在线编辑应用总结
Aug 08 Javascript
原生js封装自定义滚动条
Mar 24 Javascript
微信小程序工具函数封装
Oct 28 Javascript
Vue v-model组件封装(类似弹窗组件)
Jan 08 Javascript
Angular+ionic实现折叠展开效果的示例代码
Jul 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
BBS(php &amp; mysql)完整版(六)
2006/10/09 PHP
PHP include_path设置技巧分享
2011/07/03 PHP
PHP框架Laravel学习心得体会
2015/10/28 PHP
php获取linux命令结果的实例
2017/03/13 PHP
PHP 实现字符串翻转(包含中文汉字)的实现代码
2017/04/01 PHP
用PHP的反射实现委托模式的讲解
2019/03/22 PHP
学习YUI.Ext 第六天--关于树TreePanel(Part 2异步获取节点)
2007/03/10 Javascript
关于IE BUG与字符串截取substr的解决办法
2013/04/10 Javascript
IE6-8中Date不支持toISOString的修复方法
2014/05/04 Javascript
按钮接受回车事件的三种实现方法
2014/06/06 Javascript
js实现的奥运倒计时时钟效果代码
2015/12/09 Javascript
js实现数组冒泡排序、快速排序原理
2016/03/08 Javascript
jQuery实现HTML表格单元格的合并功能
2016/04/06 Javascript
JS实现简单的tab切换选项卡效果
2016/09/21 Javascript
JavaScript三种绑定事件方式及相互之间的区别分析
2017/01/10 Javascript
jquery表单验证实例仿Toast提示效果
2017/03/03 Javascript
Angular2 父子组件数据通信实例
2017/06/22 Javascript
Vue.js学习记录之在元素与template中使用v-if指令实例
2017/06/27 Javascript
Parcel 打包示例(React HelloWorld)
2018/01/16 Javascript
vue实现Input输入框模糊查询方法
2021/01/29 Javascript
react 原生实现头像滚动播放的示例
2020/04/21 Javascript
[05:28]刀塔密之一:团结则存
2014/07/03 DOTA
利用Python的Django框架生成PDF文件的教程
2015/07/22 Python
Python3爬虫学习之将爬取的信息保存到本地的方法详解
2018/12/12 Python
python实现抽奖小程序
2020/04/15 Python
Win 10下Anaconda虚拟环境的教程
2020/05/18 Python
Desigual德国官网:在线购买原创服装
2018/03/27 全球购物
英国最大的天然和有机产品在线零售商之一:Big Green Smile
2020/05/06 全球购物
什么是Deployment descriptors;都有什么类型的部署描述符
2015/07/28 面试题
债务纠纷委托书范本
2014/10/14 职场文书
幼儿园辞职信范文
2015/02/27 职场文书
中学生自我评价2015
2015/03/03 职场文书
史上最全书信经典范文大全(建议收藏)
2019/07/10 职场文书
如何在Python中创建二叉树
2021/03/30 Python
Python办公自动化之Excel(中)
2021/05/24 Python
码云(gitee)通过git自动同步到阿里云服务器
2022/12/24 Servers