我試圖將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