this is indeed why both my custom-function extend works (fields installed on return override) and so does nonchalance which indeed extends via updating and overriding the returned field so I am guilty myself to abuse the current fields situation and nothing would work if new.initialize
doesn't get approved or moves forward.
I do still feels extremely hacky in my libraries, but at least the returned override is an instance of the expected super and sub class, so it's easier to reason about and explain in its current shape.
Returning a non instance though is a whole new world of issues to explain, as nothing else in the prototype chain can work with fields likely defined to work within methods and/or accessors defined in the prototype, not just as shortcut to set something in the constructor, but specially on the DOM fields with arrows (as mostly nobody uses handleEvent out there) will backfire on extend ... every, single, time.
Thanks for the hints / explanations and the pointer to new.initialize