【问题标题】:Dynamically generate new named class from string with coffeescript使用咖啡脚本从字符串动态生成新的命名类
【发布时间】:2013-05-19 22:07:34
【问题描述】:

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

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

目前我的代码没有产生任何错误,并成功创建了新的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

【问题讨论】:

    标签: coffeescript


    【解决方案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()robots.robot1.move() 之类的代码(取决于您是否将它们附加到根目录)。

    【讨论】:

    • 但是您需要知道其他地方的名称才能以root[name] 访问它们。我认为像root.robots = { } 这样的东西是唯一理智的方法。
    • 对不起,我将您的答案标记为已接受,然后不接受。它的帮助很大,因为它解决了我遇到的范围问题,但实际上似乎并没有解决我提出的问题。
    • 我认为正在发生的事情是变量 "robot = 'string' 在声明 new Robot 时被覆盖。我希望的结果是string = new Robot。那有意义吗? jsfiddle.net/7EN5y/1
    • 我想我不太明白你想要完成什么。 should = 'shouldnt'这行的目的是什么?
    • @happilyUnStuck,这是我的best attempt,了解你想要什么。
    猜你喜欢
    • 2017-12-26
    • 2013-01-09
    • 2011-09-15
    • 1970-01-01
    • 2021-05-03
    • 1970-01-01
    • 1970-01-01
    • 2012-12-04
    相关资源
    最近更新 更多