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が単なる関数であり、のインスタンスのメソッドではないということですCFunction.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

デモ: http: //jsfiddle.net/ambiguous/zGU7H/

于 2012-05-16T05:27:13.590 に答える