この質問はCoffeeScriptを扱っていますが、同じ問題がJavaScriptにも当てはまります。この例を考えてみましょう。
class Parent    
    func: ->
        alert @member
class Child extends Parent    
    constructor: ->
        @greet()
    greet: ->
        @member = 'hello!'
        @func()
Parentそれだけでは役に立たない。(new Parent).func()を返しますundefined。
私の質問は次のとおりです。
- Parent子クラスに共通の関数と属性を提供するようなクラスを定義することに何か問題がありますか?- Parent独自のファイル内の複雑なクラスである可能性があり、プロトタイプチェーンのはるか下のクラスに機能を提供します。ドキュメントがないと、これは混乱を招く可能性があります。
- では、 Childオブジェクト - Child.greetに動的に追加します。- memberコンストラクターで最初に初期化せずにオブジェクトに新しいメンバーを追加することに何か問題がありますか?やったほうがいい- constructor: -> @member = null; @greet()ですか?そうすることで、次のプログラマーはオブジェクトが持つメンバーを把握し、未定義の変数に関する問題を回避します。反対に、コードにはJavaScriptが必要としないノイズが多く含まれます。
- 最後に、CoffeeScriptの慣用的なOOPの良い例であるソースコードはありますか?