Создание базовой единственной функции JavaScript для изменения различных объектов localStorage - PullRequest
0 голосов
/ 13 марта 2012

У меня есть вопрос новичка относительно использования переменных в javascript.Я не новичок в программировании, но я новичок в javascript, и некоторые вещи, кажется, меня убеждают.Мой вопрос касается следующего фрагмента JavaScript:

function use(xue) {
  if(xue=='zero') {
    alert(localStorage.xue)
    if(Number(localStorage.xue) <= 0) {
      alert("Out of that level spell!");
      return false;
    }
    localStorage.zero = Number(localStorage.zero)-1;
    updateGUI();
  }
}

Извините за использование стороннего сайта, но я не мог понять, как правильно отформатировать его.В любом случае это всего 13 строк, так что я надеюсь, что это не проблема.

Проблема в том, что я храню информацию в localStorage в localStorage.zero.То, что я хочу сделать, это взять передаваемую строку, чтобы использовать ее для обновления данных localStorage.Таким образом, я могу просто передать разные строки и заставить эту единственную функцию обновлять информацию для всего.

Сейчас это просто дает мне ошибку, говоря, что localStorage.xue, как и ожидалось, не определен.

Чтобы уточнить, передам ли я в пиццу, будет изменен localStorage.pizza или если я перейду в прыжке, будет изменен localStorage.hop.

Извините, если я болтаю, но немного нервничаю.

Спасибо!

1 Ответ

0 голосов
/ 13 марта 2012

Взгляните на определение localStorage здесь (это черновик w3 для веб-хранилища, поэтому реализации могут отличаться в зависимости от браузера) и руководство Mozilla здесь .

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

function use(xue) {
    localStorage.setItem(xue, xue);

    if(Number(localStorage[xue]) <= 0) {
        alert("Out of that item!");
        return false;
    } else {
        //You might want to put some more logic here:
        //maybe a check with default value for localStorage.zero like
        //if(localStorage["zero"] !== undefined && localStorage["zero"] !== null)...

        localStorage.zero = Number(localStorage.zero)-1;
        updateGui();
    }
};

Я думаю, что ваша функция в данный момент зависает, что localStorage.xue эквивалентно localStorage['xue'], но ваше намерение может бытьlocalStorage.xue относится к тому, что вы передаете, например localStorage['pizza']

В моей функции выше я пытаюсь уловить это намерение, указав localStorage[xue].Обратите внимание, что кавычки не включены, поэтому он будет использовать значение xue в качестве ключа.

Эта ссылка в Quirksmode также может помочь, это объясняет, как Объекты в JS можно рассматривать какассоциативные массивы.

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...