1

値を配列に挿入しようとしていますが、値を挿入しようとすると、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 をリテラルとして宣言し、initialize メソッドで値を定義しようとしています。

4

1 に答える 1

5

コールバックはオブジェクトを としてdone()使用しません。オブジェクトへのポインターを関数に保存して、後でオブジェクトにアクセスできるようにします。Combatthisinitialize()

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);
    });   

}
于 2013-11-01T13:28:55.720 に答える