Another example was the Z-machine, which allowed text-based games to be compiled, and used on any machine that had a Z-interpreter for it. Back in the day, actually encoding all the data would have taken too much space for the small media that was being used.
What’s cool is that people first reverse engineered the object code, then created their own compiler for it, then used that to create their own interpreters. So, if you follow the indy text-based Interactive Fiction scene, you wind up with games that use neither the original object code, nor the original interpreters.
This is also how high resolution versions of old games get made. You know, like Doom or Elite. (Doomsday and Oolite, respectively.)
Yes, interesting type of language implentation evolution.
Also, I forgot to add the note about Javascript* for the quibblers.
*Most versions of Javascript compile the source code into an intermediate object code which is faster to interpret, as do many other interpreters. This is usually a one-to-one type of translation which aside from removed comments and formatting, could be decompiled back to the original source code.