0

我环顾四周,发现了一些问题,这些问题使用-a-string-to-define-the-class-namedynamic-class-generation-in-coffeescript>但它们都没有完全解决我的问题,所以我我想知道我在解决问题的方法中是否犯了一些根本性的错误。

在下面的循环中,我正在遍历从 JSON 解析的一些数据。对于每组数据,我想class Robotstring = new Robotwherestring是一个字符串来扩展我的数据。

目前我的代码没有产生任何错误,并且成功地创建了新Robots的,但由于它们的名称是一个字符串,试图访问它们robot1.move()robot2.doSomeOtherClassyThing()不起作用并告诉我它们是未定义的。

这似乎不需要冗长的辅助函数来使其工作。我在这里想念什么?

 createRobots: -> # process robot commands
        createXcoord = missionData.xCoord
        createYcoord = missionData.yCoord
        createOrient = missionData.orientation
        createInstru = missionData.robotInstructions
        for command in createOrient
          robot = 'robot' + (_i + 1)
          name = robot
          robot = new Robot \ # create named Robot 
            name
          , createXcoord[_i] 
          , createYcoord[_i] 
          , createOrient[_i] 
          , createInstru[_i]
          console.log(robot)

我认为正在发生的事情是变量在声明"robot = 'string'时被覆盖robot = new Robot

我希望的结果是string1 = new Robot"string2 = new Robot"。那有意义吗?jsfiddle.net/7EN5y/1

4

1 回答 1

2

您需要将它们添加到上下文中。如果您希望它们是全局的,请创建一个像这样的变量:

# Either the browser root, or the CommonJS (e.g. Node) module root
root = window or exports

如果您想要一个包含机器人的对象,请将此类对象添加到根。

root.robots = []

然后在创建机器人时,将它们添加到这样的对象中。

robot = 'robot' + (_i + 1)
name = robot
robot = new Robot # ...
root[name] = robot # or robots[name] = robot

然后,您可以使用robot1.move(), 或robots.robot1.move()(取决于您是否将它们附加到根目录)之类的代码。

于 2013-05-19T22:19:46.997 回答