Resolved side effects from previous inheritance approach
authorAlexander Ebert <ebert@woltlab.com>
Mon, 2 Aug 2021 17:06:53 +0000 (19:06 +0200)
committerAlexander Ebert <ebert@woltlab.com>
Mon, 2 Aug 2021 17:06:53 +0000 (19:06 +0200)
commitc5ea789b869f6a637bf871c74930685a52cde6d0
treefdcc464c55a9af5311e65a9efd4a64ab45fe553c
parentacf0e1bdb3c03ca0a373f13752d5793632e78b8c
Resolved side effects from previous inheritance approach

This is a follow-up for db23f8af33398c4851d6ba36436592f406b35a0d which introduced a flawed change.

The iteration over the prototype chain caused the prototype itself being bound to an object on runtime, conflicting with other objects.

The root cause was that some parts of the inherited functions were still bound to `constructed`, which was attempted to be fixed by poking the prototype chain.

This new fix is a bit weird, unless one understands that the call to `Reflect.construct()` is a bit tricky because any bound call inside the constructor of `legacyClass` will be bound to `constructed`.

This change is more of a sledge hammer approach, but it works all cases that I tested, including those that were initially the cause for the previous fix as well as new issues caused by the fix.
ts/WoltLabSuite/Core/Core.ts
wcfsetup/install/files/js/WoltLabSuite/Core/Core.js