// Base "class":
class Base {
// The code for `Base` goes in this special `constructor` pseudo-method:
constructor() {
this.baseProp = 42;
}
// A method to put on the `prototype` object (an "instance method"):
baseMethod() {
console.log(this.baseProp);
}
// A method to put on the constructor (a "static method"):
static foo() {
console.log("This is foo");
}
}
// Derived "class":
class Derived extends Base {
// ^------------------ defines the prototype behind `Derived.prototype`
// The code for `Derived`:
constructor() {
// Call super constructor (`Base`) to initialize `Base`'s stuff:
super();
// Properties to initialize when called:
this.derivedProp = "the answer";
}
// Overridden instance method:
baseMethod() {
// Supercall to `baseMethod`:
super.baseMethod();
// ...
console.log("new stuff");
}
// Another instance method:
derivedMethod() {
this.baseMethod();
console.log(this.derivedProp);
}
}