Javascript 对象变量未定义,即使它为';缩写

Javascript 对象变量未定义,即使它为';缩写,javascript,node.js,Javascript,Node.js,我有一个节点项目,我在其中创建一个单元和一个AddGate: var Unit = function(value, weight) { this.value = value; this.weight = weight; } var AddGate = function() { this.sum_function = function(units) { sum = 0; for (unit in units) su

我有一个节点项目,我在其中创建一个单元和一个AddGate:

var Unit = function(value, weight) {
    this.value = value;
    this.weight = weight;
}

var AddGate = function() {
    this.sum_function = function(units) { 
        sum = 0;
        for (unit in units)
            sum += unit.value;
        return sum;
    };
};

AddGate.prototype = {
    forward: function(units) {
        this.units = units;
        this.output_unit = new Unit(this.sum_function(units), 0.0);
        return this.output_unit;
    }
}
我创建了一些单元、一个AddGate和一个ForwardNeuron(猜猜我在做什么):


但出于某种原因,当使用AddGate的sum_函数时,我可以很好地访问每个单位,但当我尝试访问unit.value时,它表示它未定义,尽管我已经清楚地初始化了它。我遗漏了什么吗?

如注释所述,
for(以单位表示)
实际上会将
unit
设置为
units
对象的键。您可以通过几种方式来纠正这一点,例如使用
units[unit].value
,但对于我来说,将
forward
sum_函数的参数设置为数组更有意义。大致简单到:

add.forward([in_1, in_2, in_3, in_4, in_5, in_6, in_7, in_8, in_9]);
该总和将是阵列上的reduce操作,如中所示:

return units.reduce((sum, unit) => sum + unit.value, 0);

仅供参考4castle的回复对我有效-我写道:

sum += units[unit].value;
这对我来说是个好办法。再次感谢4castle和trincot的快速响应


编辑:以上更好。

for..in
循环不是用于迭代值,而是用于迭代对象的键。使用
units[unit].value
。哦,那是因为单位被当作一张地图来对待,不是吗?它没有任何特殊的处理方式,这只是
for…in
的工作方式。我恐怕我刚才在尝试你的回答时遇到了一个打字错误,@trincot.Ah,是的,那么
for of
就不起作用了。好吧,这很简洁。这赢了!完全忘记了如果你使用大括号,JS会把它当作一个对象。我习惯了Java。
sum += units[unit].value;