2012-05-16 44 views

回答

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/

或者,如果你不t需要@btnClick是特別的東西,你可以直接使用該功能:

class FirstClass 
    btnClick = -> console.log('FirstClass') 
    constructor: -> 
     $('.btn').click btnClick 

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

+0

btnClick = - >的console.log( '二等:',@)永遠不會執行 – Jonas

+0

@Jonas:沒有沒有,你說你想要的東西, 「私有」 和我說的手段「只在FirstClass中可見」。在JavaScript中沒有public/private/protected,所以它也不在CoffeeScript中,最好在某些情況下可以模擬它。 –

+0

我應該打擾所有的隱藏方法嗎?什麼是一般實踐?也許有「私人」方法的JS命名約定? – Jonas