2013-03-24 85 views
3

我已寫入函數,它將其變量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** 

回答

3

你的問題是arguments不是一個數組,它的某種數組就像集合。您可以將它轉換爲像這樣的數組this.arrvar = Array.prototype.slice.call(arguments, 0);

1

我不會看到這個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