для решения поставленой задачи вроде бы все есть:
var obj = {a: {b: "c"}}, el = document.createElement("div");
function setter(arg) {
obj.a.b = arg;
}
if (/*@cc_on!@*/0) {
if (Object.defineProperty) {
Object.defineProperty(el, "a", {set: setter});
} else {
document.body.appendChild(el);
el.onpropertychange = function () {
if (event.propertyName == "a") {
obj.a.b = this.a;
}
};
}
} else {
el.__defineSetter__("a", setter);
}
alert(obj.a.b);
el.a = "d";
alert(obj.a.b);
defineProperty в IE8 с обычными объектами нельзя использовать.
Не будет работать в Opera ниже версии 9.5