使用coffeescript从字符串动态生成新的命名类

使用coffeescript从字符串动态生成新的命名类,coffeescript,Coffeescript,我环顾四周,发现了许多问题,它们都是解决问题的方法,但它们都不能准确地解决我的问题,所以我想知道我在解决问题的方法上是否犯了一些根本性的错误 在下面的循环中,我循环了一些从JSON解析的数据。对于每组数据,我想用string=new Robot扩展我的class Robot,其中string是一个字符串 目前,我的代码没有产生任何错误,并成功创建了新的机器人,但由于它们的名称是字符串,因此尝试使用robot1.move()或robot2.doSomeOtherClassyThing()访问它们时

我环顾四周,发现了许多问题,它们都是解决问题的方法,但它们都不能准确地解决我的问题,所以我想知道我在解决问题的方法上是否犯了一些根本性的错误

在下面的循环中,我循环了一些从JSON解析的数据。对于每组数据,我想用
string=new Robot
扩展我的
class Robot
,其中
string
是一个字符串

目前,我的代码没有产生任何错误,并成功创建了新的
机器人
,但由于它们的名称是字符串,因此尝试使用
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=newrobot
时,变量
“robot='string'
被写入


我希望的结果是
string1=newrobot
“string2=newrobot”
。这有意义吗?jsfiddle.net/7EN5y/1

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

# 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()
,或
robot1.move()
(取决于是否将它们附加到根上)。

但是,您需要知道其他地方的名称,以便以
root[name]
的身份访问它们。我认为类似于
root.robots={}
是唯一明智的继续方法。很抱歉,我将您的答案标记为已接受,然后又没有。这很有帮助,因为它修复了我遇到的一个范围问题,但实际上似乎没有解决我提出的问题。我想现在发生的是,在声明
新机器人时,变量
“robot='string'
被写入。我希望的结果是
string=newrobot
。这有意义吗?我想我真的不明白你想要实现什么。这句话的目的是什么?@happilyUnStuck,这是我在理解你想要什么。