3

arrvar受信した引数に変数を設定する関数を作成しました。次に、その関数にいくつかのメソッドを追加しました。

  • setArray:引数を最後に追加しますarrvar
  • showArray:配列を出力しますarrvar
  • showArrayType:配列の型を出力しますarrvar(これは常にオブジェクトです)
  • showLength:配列の長さを出力しますarrvar

ここでの問題は、以下に示すようarrvarに、呼び出したときにの長さが増加しないことです。setArray()なんでそうなの?

    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**
4

2 に答える 2

3

あなたの問題はarguments配列ではなく、コレクションのようなある種の配列です。あなたはそれをそのように配列に変換することができますthis.arrvar = Array.prototype.slice.call(arguments, 0);

于 2013-03-24T08:03:01.433 に答える
1

ArrayClassこの関数の使用は見当たりません。ArrayネイティブのJavaScriptオブジェクトを使用してみませんか?とにかく、あなたのコードはもっと短くすることができます、例えば(ここに置き換えられdocument.writeますconsole.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はこれ示し、nativeを使用して同じことを示していArrayます。

于 2013-03-24T08:08:06.530 に答える