Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Добавление объекта в объект (https://javascript.ru/forum/misc/10502-dobavlenie-obekta-v-obekt.html)

Sweet 07.07.2010 12:44

Добавление объекта в объект
 
Есть HTML-объект el=document.getElementById('id') и объект obj={a:{b:'c'}}. Можно ли как-нибудь добавить в el свойством b из obj.a так, чтобы изменение свойства, например, el.b='d', меняло объект на obj={a:{b:'d'}}???

Octane 07.07.2010 17:24

Напиши setter (для IE6,7 событие onpropertychange)
var obj = {a: {b: "c"}}, el = document.createElement("div");
el.__defineSetter__("a", function (arg) {
	obj.a.b = arg;
});

alert(obj.a.b);
el.a = "d";
alert(obj.a.b);

Kolyaj 07.07.2010 17:31

onpropertychange может быть только у DOM элементов, находящихся в дереве.

Octane 07.07.2010 17:50

для решения поставленой задачи вроде бы все есть:
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

Sweet 07.07.2010 17:51

Спасибо большое! Буду обдумывать полученную информацию:)


Часовой пояс GMT +3, время: 08:17.