具有for循环的Object构造函数不起作用

时间:2017-12-11 15:56:38

标签: javascript object

var test=new network([2,3,1]);
test.reset();
console.log(test.layers);
function network(args){
    this.layers=[];
    this.numberoflayers=args.length;
    this.reset=
    function(){
        for(i=0;i<this.numberoflayers;i++){
            this.layers.push(new layer(args[i],args[i+1]));
            this.layers[i].reset();
         }
    }
}
function layer(num,numlayer){
    this.nodes=[];
    this.reset=
    function(){
        for(i=0;i<num;i++){
            this.nodes.push(new node(numlayer));
            this.nodes[i].reset();
        }
    }
}
function node(num){
    this.weights=[];
    this.reset=
    function(){
        for(i=0;i<num;i++){
            this.weights.push(0);
        }
    }
}

这段代码是我创建神经网络的尝试。问题是,当我运行代码时,它只为每个数组创建第一个对象,而不是循环遍历它应该创建的所有对象。例如,test.layer数组应包含三个图层对象,但在第一个图层对象之后停止。与layer.nodes和nodes.weights相同。 在此先感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

您需要在for循环中使用var i = 0才能创建新的局部变量。

当你在for语句中单独使用i = 0时,它期望i已经存在。如果没有,它会在全局级别创建它,就像您在代码的顶层编写var i = 0一样。引用i的所有后续for循环都将使用此新的全局i,而不是拥有自己的本地i。因此,当您的网络构造函数调用第一个层构造函数时,一旦返回到原始函数,全局i将被设置为2。回到网络循环中,它将i递增1,使其为3,然后检查条件并退出而不创建其他图层。

答案 1 :(得分:0)

在声明循环变量i时的for循环中,使用var