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

您正在传递一组参数,但忽略除第一个之外的所有参数,您试图将其视为一个数组。

而是传递一个实际上是数组的参数。

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

修改代码:更改。将所有参数保存在一个数组this.t中。使用普通的 for 循环而不是for inasfor 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 回答