对象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
,但是对于forward
和sum_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的快速反应。
编辑:上面更好。