2012-02-27 34 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