2014-05-07 90 views
-1

我伸出那是写在CoffeeScript中和所遇到的这句法的Chrome扩展:有人可以向我解释这个coffeescript语法吗?

Commands = 
    init: -> 
    for command, description of commandDescriptions 
     @addCommand(command, description[0], description[1]) 

    availableCommands: {} 
    keyToCommandRegistry: {} 

我只是想检查这个语法和类之间的差别(这会是这样,假设):

class Commands 
    init: -> 
    for command, description of commandDescriptions 
     @addCommand(command, description[0], description[1]) 

    availableCommands: {} 
    keyToCommandRegistry: {} 

难道只是前者没有原型吗?我正确地认为可以调用顶部命令的方法,如Commands.init()。我正在使用的项目似乎使用了两种语法,所以我想确保在使用这些语言之前了解每个语言的含义。

谢谢。

+0

好的。我刚刚重读了[帮助页面的主题部分](http://stackoverflow.com/help/on-topic)。我认为关于编程语言语法的问题是关于主题的?我错了吗?我认为这是关于'程序员常用的软件工具'和(可能更费力地)'特定的编程问题',这个问题无法弄清楚语法结构的含义。另外,我认为它不属于将其视为主题的7个类别中的任何一个。有人能帮助我理解(不想争辩,只是想明白。)? –

+0

“它缺乏足够的信息来诊断问题”OT的理由对我来说没有多大意义。不要担心一次近距离投票,有人会感到困惑,有糟糕的一天,或者犯了一个错误。 –

回答

2

第一个Command的主要含义是它是一个Object而不是一个Function,因此无法直接消除它的实例。

这是一个有点混乱,其init方法包括:commandDescriptions(我只能想到的是宣告别的地方)和@addCommand,这是不附加到Command对象。如果Command没有@addCommand,我预计它是singleton。但由于Command上未声明的方法预计会出现,因此Command中的功能组看起来应该是mixed into的另一个类。

编辑:

为了澄清,对象可以@variables。在init函数中,您可以参考availableCommandskeyToCommandRegistry作为@availableCommands@keyToCommandRegistry。但是,在这个特定的例子中,@addCommand没有在任何地方声明。我本来期望它被声明为Command对象声明的一部分,如:

CommandsA = 
    init: -> 
    for command, description of commandDescriptions 
     @addCommand(command, description[0], description[1]) 

    availableCommands: {} 
    keyToCommandRegistry: {} 

    addCommand: (command, descriptionInfo, otherDescriptionInfo) -> 
    #Does some stuff 

如果你能找到其中addCommand宣布,将了解如何Command旨在用来帮助。

也值得注意:因为Command是一个对象而不是类,所以availableCommandskeyToCommandRegistry对象可以被认为是静态类变量。

+0

谢谢@aelr这正是我正在寻找的!所以为了检查,对象可以拥有可以在其上调用的方法(比如'init'),但不能有'@ variables'(这是否意味着对象范围内的'this'不会引用该对象? )。顺便说一句,它不是一个混合,但有点像一个singleton:'root.Commands = Commands'附加到其余的东西。 –

相关问题