在下面的代码中,我的印象是使用'胖箭'可以让我访问类变量。相反,无论胖或瘦箭头,我都无法访问'@accounts'变量。
有什么建议吗?
class MyClass
accounts:[]
constructor: (@accounts) ->
($ '.the_buttons').live 'click', bind_clicks
bind_clicks = (event) ->
console.log @accounts
jQuery ->
m = new MyClass([1, 2, 3])
感谢。
更新
看起来我以前输入错误导致了一些问题。
以下是排序的代码
class MyClass
accounts:[]
constructor: (@accounts) ->
($ '.the_buttons').live 'click', (event) => bind_clicks(event)
bind_clicks: (event) =>
console.log @accounts
jQuery ->
m = new MyClass([1, 2, 3])
然而,使用bind_clicks成为公共方法感觉很奇怪。
答案 0 :(得分:1)
你可以这样做
class MyClass
bind_clicks = (event) ->
console.log @accounts
accounts:null
constructor: (@accounts) ->
($ '.the_buttons').live 'click', bind_clicks
jQuery ->
m = new MyClass([1, 2, 3])
bind_clicks是在实例方法之前声明的。这是私人的。但是,它是一种私有的方法。它会产生一个闭包,这就是原因。我建议使用_bind_clicks,下划线前缀是定义私有方法的常用约定。因为这在javascript中并不存在。
当您申报帐户时也要小心:[],我建议帐号:null,更多内容:http://html5stars.com/?p=148
答案 1 :(得分:0)
另一种可能的方法。它与你的非常相似。
class MyClass
constructor: (@accounts) ->
$('body').live 'click', @bind_clicks
bind_clicks: (event) =>
console.log @accounts
$ ->
m = new MyClass([1, 2, 3])
不要引用我这个,但我不认为JS有任何公共/私人方法的概念。我想如果你不想公开你可以做的这个方法。但是,如果您多次使用此方法,您可能会冒险或重复自己。
class MyClass
constructor: (@accounts) ->
$('body').live 'click', (event) =>
console.log @accounts
$ ->
m = new MyClass([1, 2, 3])
祝你好运!
桑德罗
注意:我限制了身体的事件,所以我可以测试代码。
答案 2 :(得分:0)
您可以将bind_clicks设为私有,如下所示:
class MyClass
accounts:[]
constructor: (@accounts, @button) ->
bind_clicks = (event) =>
console.log @accounts
@button.click bind_clicks
class Button
click: (@f) ->
do_click: -> @f('event')
button = new Button()
m = new MyClass([1, 2, 3], button)
console.log m.bind_clicks # undefined (private)
button.do_click() # [1, 2, 3]
答案 3 :(得分:0)
您可以尝试一下:http://jsfiddle.net/zp6LJ/1/
私有方法必须在构造函数中定义,以实现您正在寻找的东西。
class MyClass
accounts:[]
constructor: (@accounts) ->
bind_clicks = (event) =>
console.log @accounts
$('.the_buttons').click bind_clicks
jQuery ->
m = new MyClass([1, 2, 3])