44 lines
1.2 KiB
Markdown
44 lines
1.2 KiB
Markdown
### `super` and `extends`
|
||
|
||
Due to a syntax clash with `super` with accessors, “bare” `super` (the keyword `super` without parentheses) no longer compiles to a super call forwarding all arguments.
|
||
|
||
```coffee
|
||
class B extends A
|
||
foo: -> super
|
||
# Throws a compiler error
|
||
```
|
||
|
||
Arguments can be forwarded explicitly using splats:
|
||
|
||
```
|
||
codeFor('breaking_change_super_with_arguments')
|
||
```
|
||
|
||
Or if you know that the parent function doesn’t require arguments, just call `super()`:
|
||
|
||
```
|
||
codeFor('breaking_change_super_without_arguments')
|
||
```
|
||
|
||
CoffeeScript 1.x allowed the `extends` keyword to set up prototypal inheritance between functions, and `super` could be used manually prototype-assigned functions:
|
||
|
||
```coffee
|
||
A = ->
|
||
B = ->
|
||
B extends A
|
||
B.prototype.foo = -> super arguments...
|
||
# Last two lines each throw compiler errors in CoffeeScript 2
|
||
```
|
||
|
||
Due to the switch to ES2015 `extends` and `super`, using these keywords for prototypal functions are no longer supported. The above case could be refactored to:
|
||
|
||
```
|
||
codeFor('breaking_change_super_in_non-class_methods_refactor_with_apply')
|
||
```
|
||
|
||
or
|
||
|
||
```
|
||
codeFor('breaking_change_super_in_non-class_methods_refactor_with_class')
|
||
```
|