Javascript:从它自己的递归中实例化新对象

时间:2014-01-30 12:42:56

标签: javascript object

我希望能够创建一个返回参数定义大小的网格的函数,并将参数定义的数据插入到网格的'cubbies'中。例如:

function createGrid(rows, cols, data){

var customGrid = [];

//create grid
for(row=0;row<rows;row++){
       var customRow = [];
       for(col=0;col<cols;col++){ 

               //dataFunction can accept different types of data
               if(typeof dataFunction == 'function'){//alert("was function");
                    data = dataFunction();
               }
               //Here lies our problem, I think:
               else if(typeof dataFunction == 'object'){alert("was object");
                   data = new dataFunction(); alert("was object");
               }

               else{//alert("was else");
                   data = dataFunction;
               }

             customRow.push(data);

       }
       customGrid.push(customRow);
}

return customGrid;

}

此外,我希望能够自己调用createGrid(),以便我们可以在网格中使用网格。像这样的东西:     createGrid(1,2,createGrid(2,2,CREATEOBJ))

当我这样做时,第一个网格(内部带有obj的2x2)被调用并成功创建一个新的2x2网格,每个网格都有一个唯一的对象。我希望这个过程重复出现在较大网格(1x2网格)的下一个'cubby'中,但是因为现在它(通过dataFunction)提供了一个对象,它只是提供了对下一个第一个网格的引用。杂物。

我想要的是什么:

-------------
||obj1|obj2||
||---------||
||obj3|obj4||
-------------
||obj5|obj6||
||---------||
||obj7|obj8||
-------------

反而会发生什么:

-------------
||obj1|obj2||
||---------||
||obj3|obj4||
-------------
||obj1|obj2||
||---------||
||obj3|obj4||
-------------

我希望有一种方法可以重新实例化dataFunction,以便较大网格的下一次迭代称为自身的全新版本,以便第二个'cubby'包含一个全新的网格。

有什么想法吗?

谢谢。

1 个答案:

答案 0 :(得分:1)

  

像这样:createGrid(1,2,createGrid(2,2,createObj)) - [但]它只是提供对下一个小房间中第一个网格的引用。

last time相同的问题:您正在传递一个构造网格的引用,然后将从所有新的网格中引用它 - 它将alert("was object");和对象通过引用复制。

如果要为每个构造的单元格进行实例化,则需要再次传递dataFunction参数的函数:

createGrid(1,2,function() {
    return createGrid(2,2,createObj);
})

另请注意if (typeof dataFunction == 'object') data = new dataFunction();是垃圾。您只能对newtypeof的构造函数使用'function'。否则(当dataFunction不可构造时)它将抛出异常。