2012-06-10 57 views
2

我已經閱讀了CoffeeScript OOP上的幾篇論文。從他們身上,我理解正確的話,使用中的CoffeeScript的@號(和在JavaScript this前綴):CoffeeScript - 理解「@」

  • 變量:使一個類的實例成員變量。每一個實例都有它自己的這種變量(非靜態變量)
  • 的「方法」:使得方法靜態的,這違背了它與變量確實

我在JS和CS,一個小白遺憾。他們的理念與我習慣的理念完全不同。

UPDATE

下面是對信息的引用,本人已閱讀:

只需搜索static

+0

「爲‘方法’:使方法靜態」 - 我沒有看到任何表明此的任何地方。 – Eric

+0

@Eric:查看更新。 – noncom

+2

你在問什麼嗎? – lanzz

回答

8

在方法中,@是JavaScript的this並且指向當前對象;當前對象取決於方法的調用方式,請參閱callapply,以瞭解如何使用方法的@(AKA this);您也可以使用CoffeeScript中的對象use => to bind a method

如果你說@p = 11,這與this.p = 11相同,並使p在該對象中可用。

在類定義中,@引用類本身。所以這個:

class C 
    @m: -> ... 

定義了一個類的方法,你可以說C.m()來執行它。

考慮這個例子:

class C 
    a: -> @p = 11 
    b: -> console.log(@p) 
    @c: -> console.log('Class method') 

C.c()   // This calls the class method. 
o = new C 
o.b()   // There is no 'o.p' yet. 
o.a()   // This sets 'o.p'. 
o.b()   // And now we see an 'o.p'. 
console.log(o.p) // And we see o.p here as well. 

這將使你在控制檯輸出:

Class method 
undefined 
11 
11 

演示:http://jsfiddle.net/ambiguous/DFcRt/

這些可能也有興趣:

+0

完美的答案!那就是所有的論文我讀過失蹤了。 – noncom