Coffeescript 使用新属性扩展类而不重写主构造函数
考虑到通常的Coffeescript 使用新属性扩展类而不重写主构造函数,coffeescript,Coffeescript,考虑到通常的人员等级: class Person constructor: (@firstName, @lastName) -> sayName: -> console.log "Hi, im #{@firstName} #{@lastName}" 然后我想用一个名为Employee的新类扩展这个类,该类有一个附加属性position: class Employee extends Person constructor: (@position) ->
人员
等级:
class Person
constructor: (@firstName, @lastName) ->
sayName: ->
console.log "Hi, im #{@firstName} #{@lastName}"
然后我想用一个名为Employee
的新类扩展这个类,该类有一个附加属性position
:
class Employee extends Person
constructor: (@position) ->
问题是,我重写了Person
构造函数,因此我的employees实例将不会获得firstName
和lastName
变量
在不重新定义构造函数并从Person
类继承这些属性的情况下,实现这一点的最佳方法是什么
谢谢。嗯,您已经覆盖了在构造函数中接受名字和姓氏的功能。所以我猜您希望接受基类构造函数参数以及其他参数 类似的东西可以与基类构造函数中任意数量的参数一起使用
class Person
constructor: (@firstName, @lastName) ->
sayName: ->
console.log "Hi, im #{@firstName} #{@lastName}"
class Employee extends Person
constructor: (args..., @position) -> super
dude = new Employee 'Shooty', 'McFace', 1
dude.sayName() # Hi, im Shooty McFace
console.log "position: #{ dude.position }" # position: 1
这里我们使用一个splat(
…
)来吸收任何不需要命名的参数。所有这些参数都隐式地传递给super
,后者是基类构造函数。最后一个参数将是您要捕获的附加参数。您希望在这里发生什么?是否希望firstName和lastName存在并为Null?让它们引用一些默认值?由于您只将一个值传递给构造函数(显然),因此不清楚您希望看到发生什么