如何使方法私有并在Coffeescript中继承它?

时间:2012-05-16 05:02:43

标签: javascript coffeescript private-members

如何让方法“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

http://jsfiddle.net/R646x/17/

1 个答案:

答案 0 :(得分:15)

JavaScript中没有私有,所以CoffeeScript中没有私有,有点像。你可以在课堂上把事情私有化,如:

class C
    private_function = -> console.log('pancakes')

private_function只会在C中显示。问题是private_function只是一个函数,它不是C实例上的方法。您可以使用Function.applyFunction.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

演示:http://jsfiddle.net/ambiguous/zGU7H/