Синхронизация со значением объекта
так не работает
var a={},b;
a[b]=0;
var c=a[b];
c++;
alert(a[b]);
так работает
var a={},b;
a[b]=0;
var c=[a,b];
c[0][c[1]]++;
alert(a[b]);
можно ли упростить логику синхронизации со значением объекта? |
Можно использовать аксессорные свойства объектов, правда, они не работают в IE<9.
var a={}, b;
a[b]=0;
Object.defineProperty(window, "c", {
get: function () {
return a[b];
},
set: function (v) {
a[b]=v;
},
enumerable: true
});
c++;
alert(a[b]);
|
Спасибо, не знал об этом способе.
Правда, мне нужна возможность синхронизации с любым доступным объектом (его значением). А здесь строгая привязка к a[b] Да и начальство требует IE8+ |
var a={}, b = 'b';
a[b]=0;
a[b]++;
alert(a[b]);
сразу не въехал, что нужно
var a = {};
var c = {};
var b;
a[ b ] = 0;
c[ b ] = a[ b ];
alert( c[ b ] );
только я не понимаю зачем это, если в большинстве случаев достаточно
var a = {};
var c = a;
var b;
a[ b ] = 0;
alert( c[ b ] );
|
Цитата:
Цитата:
|
nerv_, oneguy Предполагается создать контейнер (массив d для примера), в который можно "подписать" на определенное действие любые "элементы" любых объектов по ссылке.
var a={},b,a1={},b1;
a[b]=0;a1[b1]=1;
var d=[];
d.push([a,b]);d.push([a1,b1]);
for(var i=0;i<d.length;i++){
d[i][0][d[i][1]]++;
// или еще что-то
}
alert(a[b]+', '+a1[b1]);
|
это?
|
Цитата:
Оказывается, дело было в enumerable: true, если это убрать, то в IE 8 работает (в этом нет ошибки согласно спецификации, просто Object.defineProperty в IE 8 реализован нестандартным способом). Этот пример работает также в IE 8.
var a={}, b;
a[b]=0;
Object.defineProperty(window, "c", {
get: function () {
return a[b];
},
set: function (v) {
a[b]=v;
}
});
c++;
alert(a[b]);
|
nerv_ Нет. Мне нужен механизм для доступа к актуальным значениям "подписанных элементов", чтобы, например, по таймеру или по команде извне выполнять определенные действия с учетом текущих значений.
|
Цитата:
|
| Часовой пояс GMT +3, время: 22:24. |