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 相关文章推荐
发一个自己用JS写的实用看图工具实现代码
Jul 26 Javascript
分享XmlHttpRequest调用Webservice的一点心得
Jul 20 Javascript
关于使用 jBox 对话框的提交不能弹出问题解决方法
Nov 07 Javascript
jquery 绑定回车动作扑捉回车键触发的事件
Mar 26 Javascript
最新最热最实用的15个jQuery插件汇总
Jul 05 Javascript
jQuery时间插件jquery.clock.js用法实例(5个示例)
Jan 14 Javascript
原生javascript实现图片无缝滚动效果
Feb 12 Javascript
Vue下滚动到页面底部无限加载数据的示例代码
Apr 22 Javascript
nuxt中使用路由守卫的方法步骤
Jan 27 Javascript
vue+ESLint 配置保存 自动格式化代码
Mar 17 Javascript
vue 实现setInterval 创建和销毁实例
Jul 21 Javascript
Vue的列表之渲染,排序,过滤详解
Feb 24 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 date函数参数详解
2006/11/27 PHP
php strstr查找字符串中是否包含某些字符的查找函数
2010/06/03 PHP
解析php中获取系统信息的方法
2013/06/25 PHP
php实现的微信红包算法分析(非官方)
2015/09/25 PHP
PHP的Yii框架中使用数据库的配置和SQL操作实例教程
2016/03/17 PHP
php mysql 封装类实例代码
2016/09/18 PHP
键盘 keycode的值 javascript时触发事件时很有用的要素
2009/11/02 Javascript
jquery1.4.2 for Visual studio 2010 模板文件
2010/07/14 Javascript
jquery 实现两级导航菜单附效果图
2014/03/07 Javascript
将form表单中的元素转换成对象的方法适用表单提交
2014/05/02 Javascript
高效Web开发的10个jQuery代码片段
2016/07/22 Javascript
谈谈JS中常遇到的浏览器兼容问题和解决方法
2016/12/17 Javascript
vue移动端裁剪图片结合插件Cropper的使用实例代码
2017/07/10 Javascript
vue如何通过id从列表页跳转到对应的详情页
2018/05/01 Javascript
Express本地测试HTTPS的示例代码
2018/06/06 Javascript
解决LayUI表单获取不到data的问题
2018/08/20 Javascript
在vue中利用全局路由钩子给url统一添加公共参数的例子
2019/11/01 Javascript
Vue移动端用淘宝弹性布局lib-flexible插件做适配的方法
2020/05/26 Javascript
python使用wxPython打开并播放wav文件的方法
2015/04/24 Python
Python实现购物车购物小程序
2018/04/18 Python
win10 64bit下python NLTK安装教程
2018/09/19 Python
计算机二级python学习教程(2) python语言基本语法元素
2019/05/16 Python
python实现kNN算法识别手写体数字的示例代码
2019/08/16 Python
keras训练浅层卷积网络并保存和加载模型实例
2020/07/02 Python
python list的index()和find()的实现
2020/11/16 Python
最新的互联网创业计划书
2014/01/10 职场文书
给领导的致歉信范文
2014/01/13 职场文书
大学生活动策划方案
2014/02/10 职场文书
乡镇信息公开实施方案
2014/03/23 职场文书
明信片寄语大全
2014/04/08 职场文书
公务员上班玩游戏检讨书
2014/09/17 职场文书
华清池导游词
2015/02/02 职场文书
材料员岗位职责
2015/02/10 职场文书
大学生求职自荐信
2015/03/24 职场文书
证券公司客户经理岗位职责
2015/04/09 职场文书
nginx 配置缓存
2022/05/11 Servers