可以在javascript中调用sub方法吗?
作为一个实验,我试图围绕可以在javascript中调用sub方法吗?,javascript,methods,Javascript,Methods,作为一个实验,我试图围绕Number构建以下方法层次结构: Number | | pad() /\
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中是如何实现的?考虑一些更简单的问题。您可以将左右作为参数传递给
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
考虑一些更简单的事情。您可以将左右作为参数传递给
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
已修复问题:1) 调用pad()而不仅仅是pad
2) Pad()返回成员为左和右的对象。
3) 最重要的是,“这”在新函数中不起作用,因为它们不是number的一部分。提取函数外部的数字。
4) p无意中公开(window.p)。在前面放一个var 已修复问题:
1) 调用pad()而不仅仅是pad
2) Pad()返回成员为左和右的对象。
3) 最重要的是,“这”在新函数中不起作用,因为它们不是number的一部分。提取函数外部的数字。
4) p无意中公开(window.p)。在前面放一个var 我的版本
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 );
}
我的版本
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 );
}
为什么不把它叫做padLeft和padRight,让它和pad在同一水平面上?@Lloyd,这只是一个实验。也许还有其他类似的情况……为什么不把它叫做padLeft和padRight,让它和pad处于同一水平呢?@Lloyd,这只是一个实验。也可能有其他类似的情况…@TabrezAhmed:第二个参数'n'的用途是什么?是的。固定的。顺便说一句,这有助于调试:)@TabrezAhmed:你能举个例子说明你想如何区分l和n吗?哎呀!!!n的意思是在发布这个问题之前我想做的其他事情。我忘了把它取下来。对不起@塔布雷扎赫迈德:第二个参数‘n’的用途是什么?是的。固定的。顺便说一句,这有助于调试:)@TabrezAhmed:你能举个例子说明你想如何区分l和n吗?哎呀!!!n的意思是在发布这个问题之前我想做的其他事情。我忘了把它取下来。很抱歉尽管我非常感谢你的回答,但我仍然必须将@Raghav的回答标记为已被接受,因为这更符合问题的当前背景。希望你不介意。虽然我非常感谢你的回答,但我仍然不得不将@Raghav的回答标记为已被接受,因为这更符合问题的当前背景。希望你不介意。