This is normal for JavaScript inheritance chains. Any method (including callbacks) resolves to the most-derived (subclass) implementation. The subclass gets the choice of when/how/if to call a superclass method.
I.e., if x-foo has a method 'doStuff', and x-bar extends x-foo, then x-bar can override doStuff and:
- completely redefine doStuff behavior by reimplementing and never calling x-foo.prototype.doStuff
- do some work, then call this.super() to get the default behavior, then do more work
- capture the return value of this.super() and modify or act on it
- control arguments sent to x-foo implementation via this.super() (note that super takes an _array_ of pass-through arguments as a parameter, e.g. `this.super(arguments)` or `this.super([a, 3, null]))
If you automate calling super-class methods, you lose all the flexibility above. This is why we jump through several hoops to provide `this.super` method.