【发布时间】:2012-10-10 20:15:48
【问题描述】:
我想在一个类属性中嵌套一些函数,如下所示。
不幸的是,他们无法访问该类的主要范围。
我可以在不向每个嵌套函数传递this 的引用的情况下解决这个问题吗?
class myClass
constructor: -> @errors = []
doSomething: -> @errors.push "I work as expected"
functions:
doStuff: ->
@errors.push "I cant access @errors" # => TypeError: Cannot call method 'push' of undefined
ugly: (context) ->
context.errors.push "It works, but I am ugly" # Works fine but requires scope injection
使用建议的粗箭头的非工作替代方案:
class myClass
constructor: ->
@errors = []
@functions:
doStuff: =>
@errors.push "I wont work either" # TypeError: Cannot call method 'toString' of undefined
可选的替代方案,不写入全局 this.errors 属性:
class myClass
constructor: ->
@functions =
errors: []
doStuff: ->
@errors.push "I will write to functions.errors only"
【问题讨论】:
-
在构造函数中绑定到this/@?
-
你的意思是
constructor: -> @errors = [] @functions: doStuff -> ...? -
也许用粗箭头 => coffeescript.org/#fat_arrow我不是咖啡脚本大师,抱歉:)
-
我也没有。尝试摆弄它,但无法让它工作。
-
用我尝试使用它的方式更新了我的帖子。
标签: javascript scope coffeescript