2012-02-27 46 views
2
class @A 
    A_Function_Alias: => @my_function 

    my_function: => 

    usage_of_alias: => 
     @A_Function_Alias.call() 

我想要的,是usage_of_aliasCoffeeScript中的字段?

usage_of_alias:=> @A_Function_Alias

并将其行为相同。即我在这里想要一个更实用的样式语法。我尝试了多种组合,但都没有成功。事实上,我必须评估我的功能,以获得内心的好东西困扰我。

一个应用是不是这样的:

event: => new Event(@my_function) 

这是为event.call().hi()

访问我可以有一些其他的声明,让我访问活动为event.hi()

东西的行为更像是一个领域而不是一个财产。

+0

我不太确定我明白你想要完成什么。相反,为什么,如果你可以发布更多的代码,也许更具体的领域,我相信我们可以帮助解决你的问题。你不应该使用'eval',这是肯定的。 – 2012-02-27 21:12:34

+0

'usage_of_alias:@ A_Function_Alias'你想要什么?它不清楚你要去的是什么。 – 2012-02-27 22:12:26

+0

我只是不想使用.call()。这样做的意义纯粹是美容。看起来好像绑定函数不能指向其他绑定函数,除非它们本身是绑定函数。 – 2012-02-28 00:05:33

回答

2

我想你想的:

class @A 
    my_function: => alert 'my function!' 

    A_Function_Alias: @::my_function 

    usage_of_alias: => 
     @A_Function_Alias() 
     # some other code... 

See what this compiles to here.

当评估一个类@是类的构造函数对象,类对象本身。并且::操作员可让您钻入原型。所以@::foo在课堂上编译为MyClass.prototype.foo

那么这是做什么是首先制定一个正常的实例方法my_function,定义A.prototype.my_function。然后我们创建一个名为A_Function_Alias的新实例方法,并直接从我们刚创建的类对象原型中分配函数。现在my_functionA_Function_Alias都指向完全相同的函数对象。


但作为一个理智的多种选择,我可能会建议定义了类可以使用私有内部功能的模式,然后更直接分配给它,没有疯狂的原型访问?

class @A 

    # Only code inside this class has access to this local function 
    innerFunc = -> alert 'my function!' 

    # Assign the inner funciton to any instance methods we want. 
    my_function: innerFunc 
    A_Function_Alias: innerFunc 

    usage_of_alias: => 
    @A_Function_Alias() 
    # or 
    @my_function() 
    # or 
    innerFunc() 
    # they all do the same thing 
+0

这看起来非常好,谢谢。我了解您的替代选择的建议。我需要一个命名空间来处理事件,以便我可以使用jQuery 1.7的on和off API。因为我没有在CoffeScript中使用方法名称作为名称空间的反射,所以我为我的事件创建了一个包装器。它看起来像这样: 'event:=> new Event(“Class.method”,@method)' 我想通过事件而不是event.call()传递给我的View来绑定事件。我也不想内联我的事件创建,以便在不使用EventFactory或实现Event.equals()的情况下更容易测试。 – 2012-02-28 02:06:55

+0

啊。这种方法存在一个具有约束力的问题。我希望很快能有更多的信息。 – 2012-02-28 15:00:39

+0

好吧,这都是因为我错过了一个需求声明,这让我度过了这整个磨难。 – 2012-02-28 15:09:05