此問題涉及CoffeeScript,但同樣的問題仍然適用於JavaScript。考慮下面這個例子:初始化父類中的變量(JavaScript/CoffeeScript成語)
class Parent
func: ->
alert @member
class Child extends Parent
constructor: ->
@greet()
greet: ->
@member = 'hello!'
@func()
Parent
是對自己沒用。 (new Parent).func()
返回undefined
。
我的問題是:
這有什麼錯定義諸如
Parent
剛剛提供常用的功能和屬性的子類類?Parent
在其自己的文件中可能是一個複雜的類,它爲原型鏈中的類提供了功能。沒有文件,這可能會令人困惑。在
Child.greet
中,我們動態地將member
添加到一個Child對象。沒有首先在構造函數中初始化它們,向對象中添加新成員是否有任何問題?constructor: -> @member = null; @greet()
是否更好?這樣,下一位程序員就知道該對象將具有什麼成員,並且將避免未定義變量的問題。另一方面是代碼將會有更多的噪聲,而JavaScript並不是必需的。最後,有沒有一個源代碼,這是一個在CoffeeScript中慣用的OOP的好例子?