1

从上一个问题,我有以下内容:

所以我已经实现了一个资源类,现在我想继续扩展它并添加我所有的常量和枚举(或者只要 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()直接跟随......所以据我了解它应该仍然在范围内......

4

3 回答 3

2

它有效: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
};
于 2011-01-07T17:51:26.657 回答
2

tilemap : new c_resource(...)在soresources从未正确分配之后,您缺少逗号,因此resources.directions.up失败,因为resources未定义和未声明。

于 2011-01-06T22:41:34.710 回答
2

调用堆栈是enemies什么?你可以做这样的事情:

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

function f() {
  return foo.bar;
}

由于您可以在使用它们的代码“下方”声明函数,因此它工作了一半,但后来由于f()尝试使用而失败foo,目前尚未构造。

于 2011-01-07T18:27:52.757 回答