考虑通常的Person
类:
class Person
constructor: (@firstName, @lastName) ->
sayName: ->
console.log "Hi, im #{@firstName} #{@lastName}"
然后,我希望使用一个名为Employee
的新类扩展此类,该类具有附加属性position
:
class Employee extends Person
constructor: (@position) ->
问题在于我覆盖了Person
构造函数,因此我的员工实例无法获得firstName
和lastName
个变量。
如果不重新定义构造函数并从Person
类继承这些属性,最好的方法是什么?
感谢。
答案 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
这里我们使用splat(...
)来吸收我们不需要命名的任何参数。所有这些参数都隐式传递给super
,它是基类构造函数。最后一个参数将是您要捕获的附加参数。