gpt4 book ai didi

javascript - 在父类中初始化变量(JavaScript/CoffeeScript 习语)

转载 作者:行者123 更新时间:2023-11-30 13:16:42 25 4
gpt4 key购买 nike

这个问题涉及 CoffeeScript,但同样的问题仍然适用于 JavaScript。考虑这个例子:

class Parent    
func: ->
alert @member

class Child extends Parent
constructor: ->
@greet()

greet: ->
@member = 'hello!'
@func()

Parent 本身是无用的。 (new Parent).func() 返回 undefined

我的问题是:

  • 定义像 Parent 这样只为子类提供通用功能和属性的类有什么问题吗? Parent 可以是它自己文件中的一个复杂类,为原型(prototype)链中最底层的类提供功能。如果没有文档,这可能会造成混淆。

  • Child.greet 中,我们动态地将 member 添加到 Child 对象。向对象添加新成员而不首先在构造函数中初始化它们有什么问题吗?做 constructor: -> @member = null; 更好吗? @问候()?这样,下一位程序员就知道该对象将拥有哪些成员,并将避免 undefined variable 的问题。另一方面是代码会有更多的噪音,而 JavaScript 不需要。

  • 最后,是否有一个源代码是 CoffeeScript 中惯用 OOP 的一个很好的例子?

最佳答案

关于你的第一个问题,不,我不认为这样做有任何内在的错误。我会说这是 template method pattern 的情况(使用属性访问而不是方法,但基本相同)。我确实为您的代码结构增加了一些复杂性,因此,如果可以通过更简单的方式解决它,我建议您使用更简单的解决方案。

关于不在构造函数中初始化成员变量,嗯,理想情况下构造函数应该让对象处于可用状态,这并不一定意味着初始化每个可能的成员变量。对于那个特定的代码片段,添加 @member = null 在我看来没有任何意义。一个糟糕的构造函数的例子是,它要求用户做更多的事情而不是在使用它之前实例化对象,比如:

c = new Circle
c.radius = 5 # Need to set the radius to get the area.
console.log c.area() # If i hadn't set the radius this would break.

我不知道惯用的 OO CoffeeScript 有什么好的资源。我认为 Smooth CoffeeScript 是一本学习语言的好书,它有一个 chapter about OO ,但如果它足够彻底,我不会。

关于javascript - 在父类中初始化变量(JavaScript/CoffeeScript 习语),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11800518/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com