глобальное пространство имен и это в циклах coffeescript - PullRequest
2 голосов
/ 23 августа 2011

в этом коде:

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

область действия вне цикла - MyClass, а внутри цикла (это анонимная функция) область видимости изменяется на DOMWindow.

Почему это происходит? Как я могу предотвратить это? Моя главная проблема заключается в том, что я не могу получить доступ к другим функциям внутри класса MyClass, если область действия меняется.

спасибо

1 Ответ

5 голосов
/ 23 августа 2011

Используйте синтаксис жирная стрелка , чтобы связать функцию с текущим контекстом:

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

Это происходит потому, что ключевое слово do просто вызывает функцию без какого-либо контекста, поэтому по умолчанию используется объект window.

do -> ...

эквивалентно

(function() {
    ...
}());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...