我正在尝试将一个值插入到数组中,但是当我尝试插入该值时,它给我 Connot set Property '0' of undefined。但显然我已经定义了数组。
错误行:
this.enemyMinions[i] = new EnemyCombatMinion(new Minion(enemyMinionInfo[0], 0, enemyMinionInfo[1], enemyMinionInfo[2], enemyMinionInfo[3], 0, 0, 0, 0, 0, 0));
这是完整的代码:
function Combat() {
this.enemyMinions = [];
this.playerMinions = [];
this.currentEnemyMinion = null;
this.currentPlayerMinion = null;
}
Combat.prototype.initialize = function() {
var o = 0;
for(var i = 0; i < partySlots.length; i++) {
if(partySlots[i]) {
this.playerMinions[o] = PlayerCombatMinion(partySlots[i]);
o++;
}
}
this.currentPlayerMinion = this.playerMinions[0];
$.ajax({
url: "./api/generateEnemyCombatMinions.php",
cache: false
})
.done(function( html ) {
var response = html.split(":::");
for(var i = 0; i < response.length; i++) {
var enemyMinionInfo = response[i].split("::");
this.enemyMinions[i] = new EnemyCombatMinion(new Minion(enemyMinionInfo[0], 0, enemyMinionInfo[1], enemyMinionInfo[2], enemyMinionInfo[3], 0, 0, 0, 0, 0, 0));
}
alert(this.enemyMinions.length);
});
}
如您所见,我在类构造函数中将 this.enemyMinons 声明为文字,并尝试在初始化方法中为其定义一个值。
最佳答案
done()
回调不会将您的Combat
对象用作this
。在 initialize()
函数中保存指向该对象的指针,以便稍后访问该对象。
Combat.prototype.initialize = function() {
var o = 0;
for(var i = 0; i < partySlots.length; i++) {
if(partySlots[i]) {
this.playerMinions[o] = PlayerCombatMinion(partySlots[i]);
o++;
}
}
this.currentPlayerMinion = this.playerMinions[0];
// this is new
var that= this;
$.ajax({
url: "./api/generateEnemyCombatMinions.php",
cache: false
})
.done(function( html ) {
var response = html.split(":::");
for(var i = 0; i < response.length; i++) {
var enemyMinionInfo = response[i].split("::");
// use "that" here instead of "this"
that.enemyMinions[i] = new EnemyCombatMinion(new Minion(enemyMinionInfo[0], 0, enemyMinionInfo[1], enemyMinionInfo[2], enemyMinionInfo[3], 0, 0, 0, 0, 0, 0));
}
alert(that.enemyMinions.length);
});
}
关于javascript - 未捕获的类型错误 : Cannot set property '0' of undefined,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19727656/