这个问题涉及 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.greet
中,我们动态地添加member
到一个 Child 对象。向对象添加新成员而不首先在构造函数中初始化它们有什么问题吗?这样做更好constructor: -> @member = null; @greet()
吗?这样,下一个程序员就知道对象将拥有哪些成员,并将避免未定义变量的问题。另一方面是代码会有更多的噪音,这是 JavaScript 不需要的。最后,是否有源代码是 CoffeeScript 中惯用 OOP 的一个很好的例子?