作为一项实验,我正在尝试围绕Number
构建以下方法层次结构:
Number
|
|
pad()
/\
/ \
/ \
/ \
left() right()
确切地说,我希望left()
和right()
成为pad()的子方法,这样我就可以通过拨打电话来填充数字:
var i = 100;
i.pad().left();
这是我正在研究的实验脚本:
/*
Javascript to pad zero's to a number at the left or right.
*/
Number.prototype.pad = function()
{
Number.prototype.pad.left = function(l)
{
if(typeof l=='undefined')
l = 0;
p = this+'';
var r = l - p.length;
while((r--)>0)
p = '0'+p;
return p;
}
Number.prototype.pad.right = function(l)
{
if(typeof l=='undefined')
l = 0;
p = this+'';
var r = l - p.length;
while((r--)>0)
p = p+'0';
return p;
}
}
i = 646;
padded = i.pad.left(9); /* Possible calling format*/
alert(padded);
这在Javascript中如何实现?
答案 0 :(得分:3)
问题已解决:
1)调用pad()而不是pad pad
2)Pad()返回带有左右成员的对象
3)最重要的是,'这个'在新功能中不起作用,因为它们不是数字的一部分。提取函数外的数字。
4)p无意中变得公开(window.p)。把var放在前面。
Number.prototype.pad = function() {
var number = this.valueOf();
return {
left: function(l)
{
console.log(this);
if(typeof l=='undefined')
l = 0;
var p = number + '';
var r = l - p.length;
while((r--) > 0)
p = '0'+ p;
return p;
},
right: function(l)
{
if(typeof l=='undefined')
l = 0;
var p = number + '';
var r = l - p.length;
while((r--)>0)
p = p+'0';
return p;
}
}
}
i = 646;
padded = i.pad().left(9); /* Possible calling format*/
alert(padded);
答案 1 :(得分:1)
考虑更简单的事情。您可以将左右作为参数传递给pad
。例如:
Number.prototype.pad = function( l,r ) {
l = l || 0; r = r || 0;
var arr = [ this ],
i = 0, j = 0;
for ( ; i < l; ++i ) arr.unshift(0);
for ( ; j < r; ++j ) arr.push(0);
return arr.join('');
};
console.log( (12).pad(2,0) ); //=> 0012
console.log( (12).pad(0,1) ); //=> 120
console.log( (12).pad(3,2) ); //=> 0001200
这是一个更短的功能和简洁的代码片段:
Number.prototype.pad = function( l,r ) {
return this.toString()
.replace( /\d+/, new Array( ++l ).join('0') +'$&'+
new Array( ++r||0 ).join('0'));
}
答案 2 :(得分:0)
我的版本
Number.prototype.lpad = function( num ) {
var padding = new Array( num + 1 ).join("0"),
result = padding + this.toString( 10 );
return result.slice( -num );
}
Number.prototype.rpad = function( num ) {
var padding = new Array( num + 1 ).join("0"),
result = this.toString( 10 ) + padding;
return result.slice( 0, num );
}