Доступ к объекту

#javascript #jquery

#javascript #jquery

Вопрос:

Пользователь вводит различные записи в поля. Затем, когда он нажимает кнопку create, я написал функциональный тест () для создания объекта hero с записями пользователей. Но когда я пытаюсь получить доступ к объекту hero с помощью кнопки проверить вашего героя, я получаю

Главный символ (=имя индивидуализированного объекта-героя) не определен

Что я делаю не так? Как мне извлечь объект mainCharacter из функции test()?

Я пробовал множество операторов возврата объекта mainCharacter в функции test().

 function Hero(name, power, endurance, lives, workedout) {
  this.name = name;
  this.power = power;
  this.endurance = endurance;
  this.lives = lives;
  this.workedout = workedout;
}

// Create the hero function; takes the values from the players entries except for workedout;

function test() {
  var name1 = $("#heroName").val();
  var power1 = document.getElementById("heroPower").value;
  var endurance1 = $("#heroEndurance").val();
  var lives1 = document.getElementById("heroLives").value;
  var workedout1 = false;

  // CHECK IF THERE`s a STRING IN HERO NAME

  switch (isNaN(name1) || parseInt(name1)) {
    case true:
      alert("Everything ok");
      break;
    default:
      alert("Please enter a name");
      break;
  }

  var mainCharacter = new Hero(name1, power1, endurance1, lives1, workedout1);


  alert("His name is "   mainCharacter.name   " his power is "   mainCharacter.power   " his endurance is "   mainCharacter.endurance   " and his lives are "   mainCharacter.lives);
  return mainCharacter;

};

function alertHero() {
  alert(mainCharacter.lives);
}  
 <h1>Create your hero</h1>

Your hero`s name <input type="text" name="name" id="heroName"> Your hero`s power <input type="number" name="power" id="heroPower"> Your hero`s endurance <input type="number" name="endurance" id="heroEndurance"> Your hero`s lives <input type="number" name="lives"
  id="heroLives">

<button onclick="test()"> Create </button>
<br>
<br>
<br>
<button onclick="alertHero()"> Check your hero  </button>  

Комментарии:

1. mainCharacter не определен в области, к которой alertHero имеет доступ (которая является глобальной областью). test возвращает объект, но вы ничего с ним не делаете. «Как мне извлечь объект mainCharacter из функции test()?» Учитывая способ написания вашего кода, вы можете присвоить его глобальной переменной: window.mainCharacter = test(); .

2. похоже, вы нигде не сохраняли mainCharacter

3. Итак, что мне делать???

4. Хотите создать объект из записей пользователей

5. либо сохраните его как глобальную переменную, либо в закрытии

Ответ №1:

Вам следует взглянуть на область. Быстрое исправление может быть чем-то вроде этого:

 var mainCharacter;

...

function test() {
    // same as your old code
    mainCharacter = new Hero(...);
}

function alertHero() {
    alert(mainCharacter.lives);
}