This function is of only limited utility because it cannot be used with write-protected system functions.
The reason we write f = on f and not something like f = on(x -> ...) is so the function handed to on will know its name. The name will appear in the display.