对象variables即使初始化也是未定义的

我有一个Node项目,我创build一个单元和一个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; } } 

我创build了一些单位,一个AddGate和一个ForwardNeuron(猜猜我在做什么):

 var in_1 = new Unit(1.0, 0.0); ... var in_9 = new Unit(3.0, 0.0); var add = new AddGate(); var forwardNeuron = function() { a = add.forward({in_1, in_2, in_3, in_4, in_5, in_6, in_7, in_8, in_9}); }; forwardNeuron(); 

但是由于某种原因,在AddGate的sum_function中,我可以很好地访问每个单元,但是当我尝试访问unit.value时,它说它是未定义的,尽pipe我已经明确地初始化了它。 我错过了什么吗?

正如注释所指定的, for (let unit in units)实际上将unit设置为units对象的关键字 。 你可以用几个方法来纠正这个问题,比如使用units[unit].value ,但是对于forwardsum_function是一个数组,我会更有意义。 或多或less如此简单:

 add.forward([in_1, in_2, in_3, in_4, in_5, in_6, in_7, in_8, in_9]); 

总和将是一个减less数组中的操作,如下所示:

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

仅供参考4castle的回应为我工作 – 我写道:

 sum += units[unit].value; 

那为我做了诡计。 再次感谢4castle和trincot的快速反应。

编辑:上面更好。