我试图将splat向前传递给超级构造函数。事情是这样的:CoffeeScript:用(splat ...)参数重写一个方法
class Mom
constructor: (vars...) ->
[code]
class Son extends Mom
constructor: (vars...) ->
super(???)
[code]
那么,问题是:
我如何调用父类的构造函数沿儿子收到图示参数传递?
我试图将splat向前传递给超级构造函数。事情是这样的:CoffeeScript:用(splat ...)参数重写一个方法
class Mom
constructor: (vars...) ->
[code]
class Son extends Mom
constructor: (vars...) ->
super(???)
[code]
那么,问题是:
我如何调用父类的构造函数沿儿子收到图示参数传递?
super
是超级神奇的。
如果你just write super
它将编译向超构造函数转发的所有参数,这就是你在这种情况下,想要的东西:)
class Mom
constructor: (vars...) ->
console.log "constructing Mom with #{vars}"
class Son extends Mom
constructor: (vars...) ->
super
new Son 'a', 'b', 'c'
# Output: constructing Mom with a,b,c
super vars...
可能是你在找什么。
电话您不需要做任何事情。构造函数实际上只使用了arguments
JavaScript变量。这意味着,您可以按照原样拨打super
。
你也可以调用没有参数(也没有parens)的'super'来调用超类的实现,它的参数和传递给子构造函数的参数完全相同。 – 2013-03-07 21:29:23
@IanHenry良好的建议,但请记住,没有参数的超级用户使用'arguments'变量,因此它实际上会使用最接近的作用域(或函数调用)的参数来调用它。所以从这种方式调用超级回调将会以非常奇怪的方式失败。 – 2013-03-08 04:30:47
@AaronDufour哇,很高兴知道。这听起来像CoffeeScript中的一个bug,但显然不适用于jashkenas ... https://github.com/jashkenas/coffee-script/issues/1606 – 2013-03-08 15:55:48