对象变量即使已初始化也未定义

时间:2017-04-03 23:21:17

标签: javascript node.js

我有一个Node项目,我在其中创建一个Unit和一个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时,它表示它未定义,即使我已经清楚了初始化它。我错过了什么吗?

2 个答案:

答案 0 :(得分:3)

根据评论指定,for (let unit in units)实际上会将unit设置为units对象的。您可以通过几种方式更正此问题,例如使用units[unit].value,但对于forwardsum_function作为数组的参数,我会更有意义。或多或少如此简单:

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

答案 1 :(得分:0)

FYI 4castle的回复对我有用 - 我写道:

System.out.println("HELLO")
TransactionRunner.TransactionCallable callable =  new TransactionRunner.TransactionCallable<Void>() {

        @Nullable
        @Override
        public Void run(TransactionContext transaction) throws Exception {
                System.out.println("WORLD")

        }}

databaseClient.readWriteTransaction().run(callable);

这对我有用。再次感谢4castle和trincot的快速反应。

编辑:以上情况甚至更好。