【发布时间】:2011-11-02 03:52:49
【问题描述】:
在这段代码中:
class MyClass
myfun: (arg) ->
for x in arg
do ->
...
循环外的作用域是 MyClass,而循环内(它是一个匿名函数)作用域会变为 DOMWindow。
为什么会这样?我该如何预防?我的主要问题是,如果范围发生变化,我将无法访问 MyClass 类中的其他函数。
谢谢
【问题讨论】:
在这段代码中:
class MyClass
myfun: (arg) ->
for x in arg
do ->
...
循环外的作用域是 MyClass,而循环内(它是一个匿名函数)作用域会变为 DOMWindow。
为什么会这样?我该如何预防?我的主要问题是,如果范围发生变化,我将无法访问 MyClass 类中的其他函数。
谢谢
【问题讨论】:
使用fat arrow语法将a函数绑定到当前上下文:
class MyClass
myfun: (arg) ->
for x in arg
do =>
...
这是因为 do 关键字只是在没有任何上下文的情况下调用函数,所以它默认为 window 对象。
do -> ...
相当于
(function() {
...
}());
【讨论】:
this/@ 如何在 JavaScript/CoffeeScript 中工作的更多信息,请参阅 JavaScript Garden 或(插入)my CoffeeScript book。