使用新属性扩展类而不覆盖主构造函数

时间:2014-04-28 16:46:15

标签: coffeescript

考虑通常的Person类:

class Person
  constructor: (@firstName, @lastName) ->
  sayName: ->
     console.log "Hi, im #{@firstName} #{@lastName}"

然后,我希望使用一个名为Employee的新类扩展此类,该类具有附加属性position

class Employee extends Person
   constructor: (@position) ->

问题在于我覆盖了Person构造函数,因此我的员工实例无法获得firstNamelastName个变量。

如果不重新定义构造函数并从Person类继承这些属性,最好的方法是什么?

感谢。

1 个答案:

答案 0 :(得分:1)

嗯,嗯,你已经覆盖了能力来接受构造函数中的名字和姓氏。所以我猜你想接受基类构造函数参数以及其他参数吗?

这样的东西可以使用基类构造函数中的任意数量的参数。

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

Working example here

这里我们使用splat(...)来吸收我们不需要命名的任何参数。所有这些参数都隐式传递给super,它是基类构造函数。最后一个参数将是您要捕获的附加参数。