この質問は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の良い例であるソースコードはありますか?