对象变量是不确定的,即使它初始化
问题描述:
我有,我创建一个单元和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(猜我在做什么):
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,它说,这是不确定的,即使我已经清楚地初始化它。我错过了什么吗?
答
由于意见栏内注明,for (let unit in units)
实际上将设置unit
为units
对象的关键。您可以通过几种方法来纠正这种情况,例如使用units[unit].value
,但对于forward
和sum_function
的参数是一个数组,它对我来说更有意义。更多或更少的那样简单:
add.forward([in_1, in_2, in_3, in_4, in_5, in_6, in_7, in_8, in_9]);
总和将是一个阵列上减少操作中:
return units.reduce((sum, unit) => sum + unit.value, 0);
+0
简明扼要的好悲伤。这赢了!如果你使用花括号,完全忘了JS把它当作一个对象。我习惯Java。 –
答
FYI 4castle的回答为我工作 - 我写道:
sum += units[unit].value;
这对我来说是诀窍。再次感谢4castle和trincot的快速响应。
编辑:上面更好。
'for..in'循环不用于迭代值,它们用于迭代对象的键。使用'units [unit] .value'。 – 4castle
哦,那是因为单位正在像一张地图一样对待,不是吗? –
它没有以任何特殊的方式处理,它只是'如何...'的作品。 – trincot