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?让它们引用一些默认值?由于您只将一个值传递给构造函数(显然),因此不清楚您希望看到发生什么