javascript - 未捕获的类型错误 : Cannot set property '0' of undefined

标签 javascript arrays

我正在尝试将一个值插入到数组中,但是当我尝试插入该值时,它给我 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/

相关文章:

javascript - Canvas 中的两个(任意)区域 : figuring out which is bigger

javascript - 当 MapStyle 改变时,谷歌地图改变图标标记

arrays - 如何将 NSManagedObject 值转换为具有键和值对的字典?

java - JButton 用颜色创建

javascript - 为类似数据结构的区 block 链对象数组排序

javascript - JS数组到PHP并使用PDO更新MYSQL中的表

javascript - 隐藏和显示两个模式,滚动不起作用

javascript - 如何将本地时间转换为另一个时区?

javascript - Angular 过滤器: don't use the data of the other array

javascript - 动态创建的 d3 图表内的 Angular ng-click 不起作用