Продолжая JavaScript "классы" - перечисления в - PullRequest
1 голос
/ 07 января 2011

Из предыдущего вопроса у меня есть следующее:

Итак, я реализовал класс ресурсов, теперь я хотел бы продолжить его расширение и добавить все свои константы и перечисления (или насколько позволит JS ...).

Это то, что у меня сейчас есть:

var resources = {
  // images
  player  : new c_resource("res/player.png"),
  enemies : new c_resource("res/enemies.png"),
  tilemap : new c_resource("res/tilemap.png")
};

И это то, что я хотел бы продолжить расширять до:

var resources = {
  // images
  player  : new c_resource("res/player.png"),
  enemies : new c_resource("res/enemies.png"),
  tilemap : new c_resource("res/tilemap.png"),

  // enums
  directions : {up:0, right:1, down:2, left:3},
  speeds     : {slow: 1, medium: 3, fast: 5}
};

...

function enemies() {
  this.dir = resources.directions.down; // initialize to down
}

Когда я пытаюсь получить доступ к resources.directions.up, мой JS-скрипт падает в пылающую кучу горящего кода.Разрешены ли перечисления в этом контексте, и если нет, как я могу правильно вставить их для использования вне обычной функции?Я также пытался определить их как глобальные с похожим эффектом.


правки: исправил запятую ... это была просто ошибка при расшифровке.

Когда я запустил его вFirefox и наблюдая за консолью, я получаю сообщение об ошибке: resources is undefined.

«Класс» ресурсов определен в верхней части моего скрипта, и function enemies() непосредственно следует ... так что из того, что я понимаюэто все еще должно быть в области видимости ...

Ответы [ 3 ]

2 голосов
/ 07 января 2011

Работает: http://jsfiddle.net/XfurM/2/

В JavaScript перечисления можно получить, просто объявив массив или объект, используя буквенную запись:

var weekdays = [
    'Monday',
    'Tuesday', 
    'Wednesday', 
    'Thursday', 
    'Friday', 
    'Saturday', 
    'Sunday'
];  

или

var weekdays = {
    Monday: 1,
    Tuesday: 2,
    Wednesday: 3,
    Thursday: 4,
    Friday: 5,
    Saturday: 6,
    Sunday: 7
};
2 голосов
/ 07 января 2011

Что такое стек вызовов для enemies?Вы могли бы сделать что-то вроде этого:

var foo = {
  bar: 1,
  f_rv: f()
};

function f() {
  return foo.bar;
}

, который работает на полпути, так как вы можете объявить функции «ниже» кода, который их использует, но позже не удается, так как f() пытается использовать foo, чтона данный момент не построено.

2 голосов
/ 07 января 2011

Вы пропускаете запятую после tilemap : new c_resource(...), поэтому resources никогда не назначается должным образом, поэтому resources.directions.up завершается ошибкой, поскольку resources не определено и не объявлено.

...