If .super were the only issue, then that could work. However that isn't the case.

For one, there are a few more properties that aren't allowed in old browsers.

And two, it isn't so much the property name but the functionality it provides that is missing in those browsers. Just a few off the top of my head:

- Object.create
- Array.isArray
- JSON.stringify
- Reliable hasOwnProperty (as used by isPlainObject)
- Reliable typeof for native functions (as used by clone)

Fixing .super will make the parser die slightly later, that's all.

Fixing .super and the other properties will make the parser never die in IE8, but it will fail upon execution. Though execution is fine as long as you have a proper feature test (like VE has) before initialising too much.

The ES5 methods OOjs uses (Object.create, Array.isArray, etc.) are perfectly polyfillable. I've always been very careful in OOjs to not adopt ES5 features that are fundamentally new language constructs that are cannot polyfill.

However, just to explain that there is a little more to it. The exception you saw is just the tip of a small floe of ice. A small floe, but it won't melt on its own.

So here's what I'd propose (in no particular order) for the medium to long term:

- Make OOjs parseable in ES3 engines.

- Document that OOjs is ES3 parser compatible, but does require ES5 features to be present. Consumer is responsible for providing a polyfill of their choosing if they need to support older browsers (write for the future, not the past).

- Ship an ES5 shim in MediaWiki core which can be used as a dependency of oojs. And is conditionally loaded based on a quick feature test in a ResourceLoader dependency function that adds the dependency conditionally (this conditional dependency creation is a new feature in ResourceLoader's client js, however is not yet exposed on the server-side).


This all of course is for OOjs core. OOjs UI makes much stronger use of browser behaviour (because it renders visually, polyfilling is generally not an option, it requires rigorous testing and adding of quirks and workaround for old browsers).

For the short term:

- OOjs currently requires ES5. *Do not load* this module in older browsers. It is the responsibility of the consuming code to feature test the environment before loading everything. This is why VisualEditor doesn't throw up in IE8.