2

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

4

1 回答 1

15

JavaScript 中没有私有,所以 CoffeeScript 中也没有私有。您可以像这样在班级级别将事情设为私有:

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

private_function只会在C. 问题是它private_function只是一个函数,它不是C. 您可以使用Function.applyor解决这个问题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

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

于 2012-05-16T05:27:13.590 回答