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 实现无缝滚动 兼容IE和FF
Jul 15 Javascript
jquery $.ajax各个事件执行顺序
Oct 15 Javascript
jquery选择器的选择使用及性能介绍
Jan 16 Javascript
js输入框邮箱自动提示功能代码实现
Dec 10 Javascript
使用jQuery制作遮罩层弹出效果的极简实例分享
May 12 Javascript
JS图片压缩(pc端和移动端都适用)
Jan 12 Javascript
浅谈JavaScript中的属性:如何遍历属性
Sep 14 Javascript
vue的状态管理模式vuex
Nov 30 Javascript
Angularjs Promise实例详解
Mar 15 Javascript
vue.js实现标签页切换效果
Jun 07 Javascript
ES2020 新特性(种草)
Jan 12 Javascript
一文读懂vue动态属性数据绑定(v-bind指令)
Jul 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
星际玩家的三大定律
2020/03/04 星际争霸
PHP file_exists问题杂谈
2012/05/07 PHP
jquery遍历之parent()和parents()的区别及parentsUntil()方法详解
2013/12/02 Javascript
yui3的AOP(面向切面编程)和OOP(面向对象编程)
2015/05/01 Javascript
js面向对象的写法
2016/02/19 Javascript
JavaScript中文件上传API详解
2016/04/01 Javascript
Javascript缓存API
2016/06/14 Javascript
浅谈jQuery中的checkbox问题
2016/08/10 Javascript
原生JS版和jquery版实现checkbox的全选/全不选/点选/行内点选(Mr.Think)
2016/10/29 Javascript
详解webpack打包vue时提取css
2017/05/26 Javascript
Node.JS 循环递归复制文件夹目录及其子文件夹下的所有文件
2017/09/18 Javascript
Nodejs中的JWT和Session的使用
2018/08/21 NodeJs
ElementUI radio组件选中小改造
2019/08/12 Javascript
vue 微信分享回调iOS和安卓回调出现错误的解决
2020/09/07 Javascript
vue 数据遍历筛选 过滤 排序的应用操作
2020/11/17 Javascript
js实现简易计算器小功能
2020/11/18 Javascript
Python中的并发编程实例
2014/07/07 Python
python使用marshal模块序列化实例
2014/09/25 Python
Python编程之黑板上排列组合,你舍得解开吗
2017/10/30 Python
Python3爬虫之urllib携带cookie爬取网页的方法
2018/12/28 Python
计算机二级python学习教程(1) 教大家如何学习python
2019/05/16 Python
Python实现队列的方法示例小结【数组,链表】
2020/02/22 Python
Django与pyecharts结合的实例代码
2020/05/13 Python
css3媒体查询中device-width和width的区别详解
2020/03/27 HTML / CSS
html如何对span设置宽度
2019/10/30 HTML / CSS
美国在线购买和出售礼品卡网站:EJ Gift Cards
2019/06/09 全球购物
戛纳奢侈品商店:Jacques Loup法国
2019/11/04 全球购物
中软国际Java程序员机试题
2012/08/19 面试题
《动手做做看》教学反思
2014/04/09 职场文书
校园演讲稿汇总
2014/05/21 职场文书
社区党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
党的群众路线教育实践活动剖析材料
2014/09/30 职场文书
会议欢迎词范文
2015/01/27 职场文书
大学社团活动总结怎么写
2019/06/21 职场文书
Python如何快速找到多个字典中的公共键(key)
2022/04/29 Python
ConditionalOnProperty配置swagger不生效问题及解决
2022/06/14 Java/Android