将元素添加到数组中不会增加其长度

问题描述:

我已写入函数,它将其变量arrvar设置为接收的参数。 然后我增加了一些方法,以该函数:将元素添加到数组中不会增加其长度

  • setArray:增加的参数的arrvar
  • showArray结束:数组arrvar
  • showArrayType输出:输出阵列arrvar的类型(这总是对象)
  • showLength:输出阵列的长度arrvar

这里的问题是,当我拨打setArray()时,arrvar的长度不会增加,如下所示。这是为什么?

function ArrayClass() 
    {    
     if (arguments.length != 0) { 
      this.arrvar = arguments; 
     }   
    } 

    ArrayClass.prototype.setArray = function() { 
     for (var i = this.arrvar.length, j = 0; j < arguments.length; i++, j++) 
     { 
      this.arrvar[i] = arguments[j];     
     }    
    } 

    ArrayClass.prototype.showArray = function() 
    { 
     for (var i in this.arrvar) { 
      document.writeln(this.arrvar[i]+' '); 
     } 
     document.writeln("<br />"); 
    } 

    ArrayClass.prototype.showArrayType = function() 
    { 
     document.writeln(typeof this.arrvar + '<br />'); 
    } 

    ArrayClass.prototype.showLength = function() 
    { 
     if (this.arrvar) { 
      document.writeln('Length: ' + this.arrvar.length + "<br />"); 
     } 
    } 

    var arrObj = new ArrayClass(11, 22, 33, 44); 
    arrObj.showArray(); //11 22 33 44 
    arrObj.showArrayType(); //object 
    arrObj.showLength(); //4 
    arrObj.setArray(55, 66, 77); 
    arrObj.showArray(); //11 22 33 44 55 66 77 
    arrObj.showArrayType(); //object 
    arrObj.showLength(); //**4** 

你的问题是arguments不是一个数组,它的某种数组就像集合。您可以将它转换为像这样的数组this.arrvar = Array.prototype.slice.call(arguments, 0);

我不会看到这个ArrayClass函数的任何使用。你为什么不使用原生javascript Array对象?无论如何,你的代码可以缩短很多,例如(取代document.writeconsole.log这里):

function ArrayClass(){    
    this.arrvar = [].slice.call(arguments) || []; 
} 

ArrayClass.prototype.setArray = function() { 
    this.arrvar = this.arrvar.concat([].slice.call(arguments)); 
} 

ArrayClass.prototype.showArray = function() { 
    for (var i=0;i<this.arrvar.length;i+=1) { 
    console.log(this.arrvar[i]); 
    } 
} 

ArrayClass.prototype.showArrayType = function() { 
    console.log(typeof this.arrvar + '<br />'); 
} 

ArrayClass.prototype.showLength = function() { 
    console.log('Length: ' + this.arrvar.length); 
} 

JsFiddle这表明,展示了相同的使用本地Array

+0

是啊,这不是最终的代码,我知道这个函数没有特定的含义,从上面的摘录那是因为我已经剥离了代码来需要一个来解释问题:p – Mahesha999 2013-03-24 08:56:12