2017-04-03 70 views
1

我有,我創建一個單元和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,它說,這是不確定的,即使我已經清楚地初始化它。我錯過了什麼嗎?

+3

'for..in'循環不用於迭代值,它們用於迭代對象的鍵。使用'units [unit] .value'。 – 4castle

+0

哦,那是因爲單位正在像一張地圖一樣對待,不是嗎? –

+0

它沒有以任何特殊的方式處理,它只是'如何...'的作品。 – trincot

回答

3

由於意見欄內註明,for (let unit in units)實際上將設置unitunits對象的關鍵。您可以通過幾種方法來糾正這種情況,例如使用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]); 

總和將是一個陣列上減少操作中:

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

簡明扼要的好悲傷。這贏了!如果你使用花括號,完全忘了JS把它當作一個對象。我習慣Java。 –

0

FYI 4castle的回答爲我工作 - 我寫道:

sum += units[unit].value; 

這對我來說是訣竅。再次感謝4castle和trincot的快速響應。

編輯:上面更好。