Add an extend() method to all Spina classes.

Review Request #12908 — Created March 22, 2023 and submitted

Information

Spina
master

Reviewers

This introduces an extend() method on Spina classes that behaves like
the Backbone extend() methods. This can take prototype properties and
static properties and will construct a new Spina-compatible subclass
that behaves just like an older-style prototype-based Backbone subclass.

With this, base classes can be converted incrementally to ES6 classes,
without breaking any legacy subclasses or altering any behavior.

The implementation is pretty straightforward. The biggest problems to
solve weren't class construction, but rather the differences between
legacy classes (which use prototype-based attributes) and ES6 classes
(which have static attributes or instance attributes, but no prototype
attributes). Those issues have been solved by the recent option changes,
allowing extend() to be able to work.

This also introduces a __super__ attribute on instances of the
classes, which is needed for compatibility with Backbone's __super__
attribute. This can help properly determine parent classes for legacy
class instances.

Verified the Review Board test suite passed when using this along with
other Spina 2 changes and converting some central base classes to
ES6 classes.

Summary ID
Add an extend() method to all Spina classes.
This introduces an `extend()` method on Spina classes that behaves like the Backbone `extend()` methods. This can take prototype properties and static properties and will construct a new Spina-compatible subclass that behaves just like an older-style prototype-based Backbone subclass. With this, base classes can be converted incrementally to ES6 classes, without breaking any legacy subclasses or altering any behavior. The implementation is pretty straightforward. The biggest problems to solve weren't class construction, but rather the differences between legacy classes (which use prototype-based attributes) and ES6 classes (which have static attributes or instance attributes, but no prototype attributes). Those issues have been solved by the recent option changes, allowing `extend()` to be able to work. This also introduces a `__super__` attribute on instances of the classes, which is needed for compatibility with Backbone's `__super__` attribute. This can help properly determine parent classes for legacy class instances.
fdd5b151abdb243eddf56e3bf70cb2d5595ee5e1
david
  1. Ship It!
  2. 
      
chipx86
Review request changed
Status:
Completed
Change Summary:
Pushed to master (224c2f1)