我有一个名为SaveData的自定义类,它由四个字符串组成。我有一个名为loadEntries的SaveData数组,我想遍历每一个并访问字符串以将它们与其他内容进行比较。在过去的几天里,我已经完成了很多关于unityscript闭包的内容(这里显然有很多内容),但我还没有办法解决这个问题。大多数示例似乎只涉及打印出每个条目的值,并且不适用于我的目的。这是我到目前为止所做的,不会编译(我理解为什么它不会,但我不明白如何使其工作):
function Update() {
for (var entry : SaveData in loadEntries) {
entry = extractData(entry);
//logic with "entry" members
}
}
function extractData(entry : SaveData) {
return function(entry : SaveData) { var myEntry = entry; };
}
我是否需要对SaveData的每个成员使用闭包而不是整个条目?这种方法甚至可能吗?
答案 0 :(得分:0)
以下是代码的基本模板:
// Create your class like this
function SaveData(x1, x2, x3, x4) {
this.string1 = x1; // Whatever value you need
this.string2 = x2; // Whatever value you need
this.string3 = x3; // Whatever value you need
this.string4 = x4; // Whatever value you need
}
// Now let us construct objects from SaveData class and insert them in array.
var loadEntries = [];
var firstInstance = new SaveData("a1", "a2", "a3", "a4");
loadEntries.push(firstInstance);
// we can directly push more objects without creating variables like this:
loadEntries.push(new SaveData("b1", "b2", "b3", "b4"));
loadEntries.push(new SaveData("c1", "c2", "c3", "c4"));
loadEntries.push(new SaveData("d1", "d2", "d3", "d4"));
// Access like this in update function
var myGlobalVar = "d1";
for (var i = 0; i < loadEntries.length; i++) {
var saveDataInstance = loadEntries[i];
// let us log the instance on console to see it is correct
console.log(JSON.stringify(saveDataInstance));
if (saveDataInstance.string1 === myGlobalVar) {
console.log("Found the instance we were looking for");
// Other strings are
// saveDataInstance.string2
// saveDataInstance.string3
// saveDataInstance.string4
}
}
在这种情况下,我认为没有必要关闭。
在此处查看有效的演示:http://jsbin.com/utezuq/1/watch
答案 1 :(得分:0)
感谢关闭了详细的答案,他是正确的,因为它没有任何范围问题。但是,我回到了这个问题,发现它出现了,因为我的自定义类“SaveData”由静态声明的字符串组成。由于它们是静态的,因此只保存了最终结果。如果有人犯了同样的错误,我会留下这个问题。