2

値を合計する関数を作成しましたが、期待した結果が得られず、0を返します

function ints(t) { this.t=t; }

ints.prototype.sum = function() {
        var sum = 0;
        var value;
        for (var _ in this.t) {
                value = _;
                sum += value;
        }
        return sum;
}

var s = new ints(1, 2, 3, 4, 5);
if (s.sum() !== 15) {
        alert("FAIL: " + s.sum());
}

そのオブジェクトを使用して修正するにはどうすればよいですか?プリミティブは使いたくない

4

3 に答える 3

1

関数に渡されたすべての引数を使用する場合は、argumentsオブジェクトを使用します。

function ints(t) {
    this.t = arguments;
}

そして、関数では、バインドされた変数をインデックスとして使用してsum、しばらくの間「配列」を反復処理します。for-in

for (var _ in this.t) {
    value = this.t[_];
    sum += value;
}
于 2012-09-29T12:06:09.027 に答える
0

一連の引数を渡しますが、配列として処理しようとしている最初の引数以外はすべて無視します。

代わりに、実際には配列である1つの引数を渡します。

var s = new ints([1, 2, 3, 4, 5]);
于 2012-09-29T11:59:53.963 に答える
0

変更されたコード:変更。すべてのパラメーターを配列に保存しますthis.tfor inasの代わりに通常のforループを使用for inすると、プロトタイププロパティも追加されます。

function ints(t) 
{   
   if(typeof t == 'object'){ // if first argument itself an array.
    this.t = t;   
   }else{
    this.t = Array.prototype.slice.call(arguments, 0);
  } 
}

ints.prototype.sum = function() {
        var sum = 0;           
     console.log(this.t);
        for (var i =0; i<this.t.length; i++) {
                sum += this.t[i];
        }           
        return sum;
}

var s = new ints(1, 2, 3, 4, 5);
if (s.sum() !== 15) {
        alert("FAIL: " + s.sum());
}​
于 2012-09-29T12:00:35.240 に答える