首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >原型对象和对象数组

原型对象和对象数组
EN

Stack Overflow用户
提问于 2017-08-20 08:52:49
回答 4查看 40关注 0票数 0

如果这个标题没有意义的话,让我详细说明一下。

我有两个物体,一个叫区域,一个叫敌人。

每个区域都有自己的敌人,所以我为每个地区制作了敌人原型。

接下来,我对每个区域原型做了一个array.push();函数,所以如果用户单击一个按钮,就会显示一个“区域”列表,他们基本上可以探索。

给我一个错误的主要部分是如果我尝试任何像alert(areas[0].enemies[0].name);这样的函数

如何使用按钮显示特定的敌人名称?

没有jQuery请

代码语言:javascript
复制
function area(name, enemies) {
  this.name = name;
  this.enemies = enemies;
}

function enemy(name, type) {
  this.name = name;
  this.type = type;
}

var cave = new area("Cave", {
  bat: new enemy("Bat", "Flying"),
  snake: new enemy("Snake", "Ground"),
});

var forest = new area("Forest", {
  bear: new enemy("Bear", "Animal"),
  coyote: new enemy("Coyote", "Wolf"),
});

areas = [];
areas.push(cave, forest);

var thatBtn = document.getElementById('thatBtn'),
    display = document.getElementById('display');

thatBtn.addEventListener('click', function() {
  for (i = 0; i < areas.length; i++) {
    var li = document.createElement('li'),
      liBtn = document.createElement('button');
    liBtn.textContent = areas[i].name;
    li.appendChild(liBtn);
    display.appendChild(li);
    liBtn.addEventListener('click', function() {
      for (j = 0; j < areas.length; j++) {
        if (areas[j].name == event.target.textContent) {
          alert(areas[j].name);
          for (k = 0; k < Object.keys(areas[j].enemies).length; k++) {
            alert(areas[j].enemies[k].name);
          }
        }
      }
    });
  }
});

<button id="thatBtn">click here</button>
  <ul id="display">
</ul>
EN

回答 4

Stack Overflow用户

发布于 2017-08-20 08:57:26

它给出了一个错误,因为areas[0].enemies不是一个数组--它是一个对象。

代码语言:javascript
复制
{
    bat: new enemy("Bat", "Flying"),
    snake: new enemy("Snake", "Ground"),
}

把它改成

代码语言:javascript
复制
for(var key in areas[j].enemies) {
    alert(areas[j].enemies[key].name);
}
票数 1
EN

Stack Overflow用户

发布于 2017-08-20 09:01:56

enemies是一个对象,而不是一个数组,因此您需要遍历keys并从中获取,而不是从索引中获取,只需用它更新您的代码片段,但是代码可能会更好。

代码语言:javascript
复制
function area(name, enemies){
    this.name = name;
    this.enemies = enemies;
}

function enemy(name, type){
    this.name = name;
    this.type = type;
}

var cave = new area ("Cave", {
    bat: new enemy("Bat", "Flying"),
    snake: new enemy("Snake", "Ground"),
});

var forest = new area ("Forest", {
    bear: new enemy("Bear", "Animal"),
    coyote: new enemy("Coyote", "Wolf"),
});
areas = [];
areas.push(cave, forest);

var thatBtn = document.getElementById('thatBtn'),
    display = document.getElementById('display');

thatBtn.addEventListener('click', function(){
  for(i=0; i < areas.length; i++){
    var li = document.createElement('li'),
        liBtn = document.createElement('button');
    liBtn.textContent = areas[i].name;
    li.appendChild(liBtn);
    display.appendChild(li);
    
    liBtn.addEventListener('click', function(){
      for(j=0; j < areas.length; j++){
        if (areas[j].name == event.target.textContent){
          alert(areas[j].name);
          var keys = Object.keys(areas[j].enemies);
          for(k=0; k < Object.keys(areas[j].enemies).length; k++){
            alert(areas[j].enemies[keys[k]].name);
          }
        }
      }
    });
    
  }
});
代码语言:javascript
复制
<button id="thatBtn">click here</button>
<ul id="display">
</ul>

票数 0
EN

Stack Overflow用户

发布于 2017-08-20 09:01:58

将敌人作为数组添加,不需要在对象中使用“命名键”。

代码语言:javascript
复制
function area(name, enemies){
    this.name = name;
    this.enemies = enemies;
}

function enemy(name, type){
    this.name = name;
    this.type = type;
}

var cave = new area ("Cave", [
    new enemy("Bat", "Flying"),
    new enemy("Snake", "Ground"),
]);

var forest = new area ("Forest",[ 
    new enemy("Bear", "Animal"),
    new enemy("Coyote", "Wolf"),
]);
areas = [];
areas.push(cave, forest);

var thatBtn = document.getElementById('thatBtn'),
    display = document.getElementById('display');

thatBtn.addEventListener('click', function(){
  for(i=0; i < areas.length; i++){
    var li = document.createElement('li'),
        liBtn = document.createElement('button');
    liBtn.textContent = areas[i].name;
    li.appendChild(liBtn);
    display.appendChild(li);
    
    liBtn.addEventListener('click', function(){
      for(j=0; j < areas.length; j++){
        if (areas[j].name == event.target.textContent){
          alert(areas[j].name);
          
          for(k=0; k < Object.keys(areas[j].enemies).length; k++){
            alert(areas[j].enemies[k].name);
          }
        }
      }
    });
    
  }
});
代码语言:javascript
复制
<button id="thatBtn">click here</button>
<ul id="display">
</ul>

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45780258

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档