Microsoft's intention for this move is obvious - to "implement" all the interfaces of DOM2 at a very small cost. Here are two examples:
Element.prototype.addEventListener = function(evtType, evtHandler) {
return this.attachEvent('on' evtType, evtHandler);
}
Object.defineProperty(Event.prototype, 'target', {
get : function() { return this.srcElement },
set: function(v) { return this.srcElement = v }
});
This seems to be the same as using __definegetter_ in the early years _ and others make Firefox compatible with IE in the same way, but this time they use a completely standard (DOM prototype and ECMA v5) method to make up for the shortcomings of IE. Maybe the rendering engine was rewritten during the development of IE8 but there was no time (I'm very optimistic...) to release a new DOM interface (maybe to be compatible with third-party applications), so this solution was given.