function genEnemy(a) {
//javascript:alert(en[0]+'\n'+genEnemy(en[0])+'\n'+en[0])
with (Math) {
a[1]=round(a[1]*(.5+random()))
a[2]=round(a[2]*(1+random()))
for (var b=0;b<5;b++) a[3][b]=round(a[3][b]*(a[3][b]/2+random()*a[3][b]/10))
for (var b=0;b<a[4].length;b++) random()<it[a[4][b]][3]/10?a[4][b]=0:0
}
return a
}
给定每个敌人数组的基础,以生成敌人的状态的脚本。 (RPG游戏)
问题是,当我期望它返回包含新统计信息的数组时,也会将敌人数组设置为新数组。为什么是这样?显然,您可以看到由此引起的问题(更改了基准,以便使弱小的敌人变得更强大)。我如何阻止它将数组设置为en(敌人值的数组)?
最佳答案
对象通过引用在JavaScript中传递。这意味着您对a
中的数组genEnemy
所做的任何更改都会反映在传入的原始数组中。您需要对该数组进行深层复制并返回该副本。这是一个可以为您完成的功能:
function cloneArray(a) {
var b = [];
for (var i = 0; i < a.length; i++)
if (a[i] instanceof Array)
b[i] = cloneArray(a[i]);
else
b[i] = a[i];
return b;
}
在
genEnemy
中,您可以执行以下操作:a = cloneArray(a);
// make changes to the new array
return a;
另外,不要忘记在代码中包含分号。即使它们是可选的,但如果您养成忽略它们的习惯,则可能会遇到意想不到的问题。