2011-08-23 61 views
2

全局命名空間,這在循環的CoffeeScript在此代碼

class MyClass 
    myfun: (arg) -> 
    for x in arg 
     do -> 
     ... 

範圍的循環之外是MyClass的,而循環內(它是一個匿名函數)的範圍變爲存在domWindow。

爲什麼會出現這種情況?我怎樣才能防止它?我的主要問題是如果範圍更改,我無法訪問MyClass類中的其他函數。

感謝

回答

5

使用fat arrow語法的功能綁定到當前環境:

class MyClass 
    myfun: (arg) -> 
    for x in arg 
     do => 
     ... 

這是因爲do關鍵字只是調用沒有任何背景的功能,所以它默認爲window目的。

do -> ... 

是相當於

(function() { 
    ... 
}()); 
+0

很好的回答。有關'this' /'@'如何在JavaScript/CoffeeScript中工作的更多信息,請參閱[JavaScript Garden](http://javascriptgarden.info/#function.this)或(plug)[我的CoffeeScript書](http: //pragprog.com/book/tbcoffee/coffeescript)。 –