0

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

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);

查看控制台时,“总计”为 0。

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

4

6 回答 6

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

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

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

于 2013-04-18T22:53:16.170 回答
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);
于 2013-04-18T22:56:34.403 回答
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());
于 2013-04-19T00:10:14.787 回答
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);
于 2013-04-18T23:03:04.463 回答
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);
于 2013-04-18T22:51:27.413 回答
0

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

console.log(output.sum());

为了得到想要的输出

于 2013-04-18T22:54:11.637 回答