mirror of
https://github.com/jashkenas/coffeescript.git
synced 2022-11-09 12:23:24 -05:00
b28e398396
* Docs: named functions and function declarations * No more prototypal `extends`; update docs and example * More comprehensive documentation of the existential operator; closes #1631 * Better document operators, including `from` * No fat arrow class methods anymore * Destructuring shouldn’t say that default values are applied in case of undefined or null * Spinoff generator and async functions into their own sections; reorder things so that the sections on functions come just before classes, and destructuring goes next to the operators (which discuss assignment) * Rewrite “CoffeeScript 2” section, making it less practical and more explanatory; move practical info into “Usage” * Update “Variable Scoping and Lexical Safety” section to remove incorrect reference to Ruby (fixes #2360), add missing details about the safety wrapper, add note about `let`/`const`. * Updated browser compiler * Updated docs * Rewrite Literate CoffeeScript breaking changes * Split apart the “Breaking Changes” and “Unsupported Features” sections into separate sidebar items and files * Add example of `not in`, closes #3281 * Fix words in bold that should be in backticks * Consolidate some breaking changes sections * Add Node API documentation; closes #3551 * Move the chaining documentation out of the changelog into its own section
1.2 KiB
1.2 KiB
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.
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:
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')