可以在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的回答标记为已被接受,因为这更符合问题的当前背景。希望你不介意。