我希望能够创建一个返回参数定义大小的网格的函数,并将参数定义的数据插入到网格的'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'包含一个全新的网格。
有什么想法吗?
谢谢。
答案 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();
是垃圾。您只能对new
为typeof
的构造函数使用'function'
。否则(当dataFunction
不可构造时)它将抛出异常。