在javascript构造函数中求和参数并返回总计

时间:2013-04-18 22:48:59

标签: javascript

如果我有一个构造函数并希望将参数值和输出相加到内部方法,我想我可以执行以下操作:

function Stats(a, b, c, d, e, f) {
    this.a = a;
    this.b = b;
    this.c = c; 
    this.d = d; 
    this.e = e; 
    this.f = f;
    var total = 0;
    var array = [a, b, c, d, e, f];
    var len = array.length;
    this.sum = function() {
        for(var i = 0; i < len; i++) {
            total += array[i];
        }
        return total;
    };
}
var output = new Stats(10, 25, 5, 84, 8, 44);
console.log(output);

查看控制台时,'total'为0。

我确信我的逻辑完全失败了,所以如果你有建议如何改善这个(以及总和),我很乐意阅读它们。

6 个答案:

答案 0 :(得分:3)

function Stats(){
    var sum = 0;
    for (var i = 0; i < arguments.length; i++) {
        sum += arguments[i];
    }
    return sum;
}

Arguments变量包含数组中函数的所有参数。

不确定你想要在那里实现什么,但我认为在那里查看你的变量堆可能很有用

答案 1 :(得分:3)

这可以缩写。

function Stats(var_args) {
  var sum = 0;
  // The arguments pseudo-array allows access to all the parameters.
  for (var i = 0, n = arguments.length; i < n; ++i) {
    // Use prefix + to coerce to a number so that += doesn't do
    // string concatenation.
    sum += +arguments[i];
  }
  // Set the sum property to be the value instead of a method
  // that computes the value.
  this.sum = sum;
}

var output = new Stats(10, 25, 5, 84, 8, 44);
// You can use a format string to see the object and a specific value.
console.log("output=%o, sum=%d", output, output.sum);

答案 2 :(得分:1)

你必须调用sum - 输出是对象:

console.log(output.sum());

并且为了改进你的课程,如果我想做的就是总结它们,我会继续做一些更普遍的事情来限制我的参数的数量:

    function Stats() {
        this.total = (function(args){
            var total = 0;
            for(var i = 0; i < args.length; i++) {
                total += args[i];
            }

            return total;
        })(arguments);
     }
var output = new Stats(10, 10, 5, 10, 10, 10,100,24,1000);

console.log(output.total);

答案 3 :(得分:1)

jsfiddle

上提供
function Stats(a, b, c, d, e, f) {
    this.a = a;
    this.b = b;
    this.c = c;
    this.d = d;
    this.e = e;
    this.f = f;

    this.sum = Array.prototype.reduce.call(arguments, function (x, y) {
        return x + y;
    }, 0);

}

var output = new Stats(10, 25, 5, 84, 8, 44);

console.log(output);

答案 4 :(得分:1)

优化版本,我认为,可以满足您的需求:

function Stats() {
    var _arguments = arguments;
    this.sum = function() {
        var i = _arguments.length;
        var result = 0;
        while (i--) {
            result += _arguments[i];
        }
        return result;
    };
}
var output = new Stats(10, 25, 5, 84, 8, 44);
console.log(output.sum());

答案 5 :(得分:0)

根据您编写代码的方式,您应该这样做

console.log(output.sum());

为了获得所需的输出