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 相关文章推荐
mysql输出数据赋给js变量报unterminated string literal错误原因
May 22 Javascript
js验证整数加保留小数点的简单实例
Dec 02 Javascript
不同编码的页面表单数据乱码问题解决方法
Feb 15 Javascript
JavaScript使用ActiveXObject访问Access和SQL Server数据库
Apr 02 Javascript
js使用DOM操作实现简单留言板的方法
Apr 10 Javascript
jQuery实现的简单折叠菜单(折叠面板)效果代码
Sep 16 Javascript
js为什么不能正确处理小数运算?
Dec 29 Javascript
Bootstrap零基础学习第一课之模板
Jul 18 Javascript
JavaScript-定时器0~9抽奖系统详解(代码)
Aug 16 Javascript
javascript中的闭包概念与用法实践分析
Jul 26 Javascript
基于vue、react实现倒计时效果
Aug 26 Javascript
vue+layui实现select动态加载后台数据的例子
Sep 20 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
攻克CakePHP系列一 连接MySQL数据库
2008/10/22 PHP
PHP+MySQL 手工注入语句大全 推荐
2009/10/30 PHP
用php制作简单分页(从数据库读取记录)的方法详解
2013/05/04 PHP
php面向对象中static静态属性和静态方法的调用
2015/02/08 PHP
Linux平台php命令行程序处理管道数据的方法
2016/11/10 PHP
php+Ajax无刷新验证用户名操作实例详解
2019/03/04 PHP
PHP序列化和反序列化深度剖析实例讲解
2020/12/29 PHP
浅谈JavaScript中面向对象技术的模拟
2006/09/25 Javascript
建立良好体验度的Web注册系统ajax
2007/07/09 Javascript
js使下拉列表框可编辑不止是选择
2013/12/12 Javascript
javascript计算当月剩余天数(天数计算器)示例代码
2014/01/09 Javascript
基于jQuery实现拖拽图标到回收站并删除功能
2015/11/25 Javascript
jQuery EasyUI右键菜单实现关闭标签/选项卡
2016/10/10 Javascript
jQuery实现节点的追加、替换、删除、复制功能示例
2017/07/11 jQuery
jQueryUI Sortable 应用Demo(分享)
2017/09/07 jQuery
ES6 Promise对象的应用实例分析
2019/06/27 Javascript
vue 实现特定条件下绑定事件
2019/11/09 Javascript
写一个Vue loading 插件
2020/11/09 Javascript
JS实现页面侧边栏效果探究
2021/01/08 Javascript
浅析Python中的getattr(),setattr(),delattr(),hasattr()
2016/06/14 Python
Python实现简单的获取图片爬虫功能示例
2017/07/12 Python
numpy找出array中的最大值,最小值实例
2018/04/03 Python
Python中defaultdict与lambda表达式用法实例小结
2018/04/09 Python
python numpy 显示图像阵列的实例
2018/07/02 Python
Python英文文本分词(无空格)模块wordninja的使用实例
2019/02/20 Python
Python 通过打码平台实现验证码的实现
2019/05/13 Python
用python给自己做一款小说阅读器过程详解
2019/07/11 Python
Django 解决由save方法引发的错误
2020/05/21 Python
Python3基于print打印带颜色字符串
2020/07/06 Python
高考自主招生自荐信
2013/10/20 职场文书
小学毕业寄语大全
2014/04/03 职场文书
教师政风行风评议心得体会
2014/10/21 职场文书
期中考试复习计划
2015/01/19 职场文书
严以用权学习心得体会
2016/01/12 职场文书
MySQL 可扩展设计的基本原则
2021/05/14 MySQL
动画电影《龙珠超 超级英雄》延期上映
2022/03/20 日漫