如何让方法“btnClick”私密?
class FirstClass
constructor: ->
$('.btn').click @btnClick
btnClick: =>
alert('Hi from the first class!')
class SecondClass extends FirstClass
btnClick: =>
super()
alert('Hi from the second class!')
@obj = new SecondClass
答案 0 :(得分:15)
JavaScript中没有私有,所以CoffeeScript中没有私有,有点像。你可以在课堂上把事情私有化,如:
class C
private_function = -> console.log('pancakes')
private_function
只会在C
中显示。问题是private_function
只是一个函数,它不是C
实例上的方法。您可以使用Function.apply
或Function.call
:
class C
private_function = -> console.log('pancakes')
m: ->
private_function.call(@)
所以在你的情况下,你可以这样做:
class FirstClass
btnClick = -> console.log('FirstClass: ', @)
constructor: ->
$('.btn').click => btnClick.call(@)
class SecondClass extends FirstClass
btnClick = -> console.log('SecondClass: ', @)
演示:http://jsfiddle.net/ambiguous/5v3sH/
或者,如果@
中的btnClick
不需要特别的任何内容,您可以按原样使用该功能:
class FirstClass
btnClick = -> console.log('FirstClass')
constructor: ->
$('.btn').click btnClick