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性能优化 创建文档碎片(document.createDocumentFragment)
Jul 13 Javascript
Javascript快速排序算法详解
Dec 03 Javascript
Bootstrap模块dropdown实现下拉框响应
May 22 Javascript
关于AngularJs数据的本地存储详解
Jan 20 Javascript
jQuery插件HighCharts绘制2D带有Legend的饼图效果示例【附demo源码下载】
Mar 10 Javascript
Angular动态添加、删除输入框并计算值实例代码
Mar 29 Javascript
Vue2单一事件管理组件通信
May 09 Javascript
Javascript实现时间倒计时效果
Jul 15 Javascript
JQuery实现ajax请求的示例和注意事项
Dec 10 jQuery
全面分析JavaScript 继承
May 30 Javascript
JS防抖和节流实例解析
Sep 24 Javascript
vue二选一tab栏切换新做法实现
Jan 19 Vue.js
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编程最快明白》第四讲:日期、表单接收、session、cookie
2010/11/01 PHP
10 个经典PHP函数
2013/10/17 PHP
PHP文件读写操作相关函数总结
2014/11/18 PHP
yii2 modal弹窗之ActiveForm ajax表单异步验证
2016/06/13 PHP
PHPMAILER实现PHP发邮件功能
2018/04/18 PHP
PHP获取MySQL执行sql语句的查询时间方法
2018/08/21 PHP
PHP利用缓存处理用户注册时的邮箱验证,成功后用户数据存入数据库操作示例
2019/12/31 PHP
PHP7新增函数
2021/03/09 PHP
IE和Firefox下event事件杂谈
2009/12/18 Javascript
使用滤镜设置透明导致 IE 6/7/8/9 解析异常的解决方法
2011/04/07 Javascript
模仿百度三维地图的js数据分享
2011/05/12 Javascript
jquery全选/全不选/反选另一种实现方法(配合原生js)
2013/04/07 Javascript
javascript检查表单数据是否改变的方法
2013/07/30 Javascript
JavaScript中为什么null==0为false而null大于=0为true(个人研究)
2013/09/16 Javascript
js 左右悬浮对联广告特效代码
2014/12/12 Javascript
js鼠标悬浮出现遮罩层的方法
2015/01/28 Javascript
jQuery.Highcharts.js绘制柱状图饼状图曲线图
2015/03/14 Javascript
解决Vue2.x父组件与子组件之间的双向绑定问题
2018/03/06 Javascript
node上的redis调用优化示例详解
2018/10/30 Javascript
Javascript异步执行不按顺序解决方案
2020/04/30 Javascript
[56:35]DOTA2上海特级锦标赛主赛事日 - 5 总决赛Liquid VS Secret第一局
2016/03/06 DOTA
Python3.x对JSON的一些操作示例
2017/09/01 Python
Python图像处理实现两幅图像合成一幅图像的方法【测试可用】
2019/01/04 Python
python利用openpyxl拆分多个工作表的工作簿的方法
2019/09/27 Python
Pytorch 之修改Tensor部分值方式
2019/12/27 Python
用于ETL的Python数据转换工具详解
2020/07/21 Python
Python 如何测试文件是否存在
2020/07/31 Python
css3实现元素环绕中心点布局的方法示例
2019/01/15 HTML / CSS
美国一家主营日韩美妆护肤品的在线商店:iMomoko
2016/09/11 全球购物
美国隐形眼镜销售网站:ContactsDirect
2017/10/28 全球购物
倩碧英国官网:Clinique英国
2018/08/10 全球购物
创业计划书六个要素
2013/12/26 职场文书
2015年清明节活动总结
2015/02/09 职场文书
《折线统计图》教学反思
2016/02/22 职场文书
2019大学竞选班长发言稿
2019/06/27 职场文书
golang实现一个简单的websocket聊天室功能
2021/10/05 Golang