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 相关文章推荐
node.js中使用socket.io制作命名空间
Dec 15 Javascript
使用Node.js为其他程序编写扩展的基本方法
Jun 23 Javascript
javascript实现10个球随机运动、碰撞实例详解
Jul 08 Javascript
jQuery实现点击后标记当前菜单位置(背景高亮菜单)效果
Aug 22 Javascript
JS基于Mootools实现的个性菜单效果代码
Oct 21 Javascript
Bootstrap每天必学之按钮(一)
Nov 24 Javascript
ES6新特性之模块Module用法详解
Apr 01 Javascript
jquery插件开发之选项卡制作详解
Aug 30 jQuery
jQuery实现的网站banner图片无缝轮播效果完整实例
Jan 28 jQuery
vue+element创建动态的form表单及动态生成表格的行和列
May 20 Javascript
VueCli3.0中集成MockApi的方法示例
Jul 05 Javascript
在vue-cli 3中给stylus、sass样式传入共享的全局变量
Aug 12 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
php中动态调用函数的方法
2015/03/16 PHP
php编程每天必学之验证码
2016/03/03 PHP
PDO::getAttribute讲解
2019/01/28 PHP
php设计模式之模板模式实例分析【星际争霸游戏案例】
2020/03/24 PHP
Avengerls vs Newbee BO3 第一场2.18
2021/03/10 DOTA
JS 控制小数位数的实现代码
2011/08/02 Javascript
JS 实现Table相同行的单元格自动合并示例代码
2013/08/27 Javascript
js实现鼠标悬浮给图片加边框的方法
2015/01/30 Javascript
关于JS中prototype的理解
2015/09/07 Javascript
JS提示:Uncaught SyntaxError:Unexpected token ) 错误的解决方法
2016/08/19 Javascript
如何实现星星评价(jquery.raty.js插件)
2016/12/21 Javascript
Vue2.x中的父组件传递数据至子组件的方法
2017/05/01 Javascript
vue移动端轻量级的轮播组件实现代码
2018/07/12 Javascript
如何使用CSS3+JQuery实现悬浮墙式菜单
2019/06/18 jQuery
Vue实战教程之仿肯德基宅急送App
2019/07/19 Javascript
javascript自定义日期比较函数用法示例
2019/07/22 Javascript
使用Node.js在深度学习中做图片预处理的方法
2019/09/18 Javascript
js实现二级联动简单实例
2020/01/11 Javascript
JavaScript之scrollTop、scrollHeight、offsetTop、offsetHeight等属性学习笔记
2020/07/15 Javascript
python教程之用py2exe将PY文件转成EXE文件
2014/06/12 Python
python实现图片中文字分割效果
2019/07/22 Python
Python定时器线程池原理详解
2020/02/26 Python
Pytorch 使用 nii数据做输入数据的操作
2020/05/26 Python
Ubuntu 20.04安装Pycharm2020.2及锁定到任务栏的问题(小白级操作)
2020/10/29 Python
英国马匹装备和马术用品购物网站:Equine Superstore
2019/03/03 全球购物
将一个数的从第5位开始的7个数取出,其余位置0
2016/05/26 面试题
消防战士优秀事迹材料
2014/02/13 职场文书
《夸父追日》教学反思
2014/02/26 职场文书
《罗布泊,消逝的仙湖》教学反思
2014/03/01 职场文书
大学生新学期计划书
2014/04/28 职场文书
商场促销活动策划方案
2014/08/18 职场文书
2015年元旦联欢晚会活动总结
2014/11/28 职场文书
初中体育教学随笔
2015/08/15 职场文书
前端vue+express实现文件的上传下载示例
2022/02/18 Vue.js
vue3语法糖内的defineProps及defineEmits
2022/04/14 Vue.js
Elasticsearch 数据类型及管理
2022/04/19 Python