Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Синхронизация со значением объекта (https://javascript.ru/forum/misc/32660-sinkhronizaciya-so-znacheniem-obekta.html)

kaf 24.10.2012 23:57

oneguy Спасибо. Хотя сейчас и нужна поддержка IE8, со временем эта необходимость может отпасть, т.ч. буду иметь в виду...

oneguy 25.10.2012 00:09

Цитата:

Сообщение от kaf (Сообщение 212084)
oneguy Спасибо. Хотя сейчас и нужна поддержка IE8, со временем эта необходимость может отпасть, т.ч. буду иметь в виду...

Однако в IE 8 можно сделать что-то подобное, используя глобальные переменные с именами типа d0, d1, ..., как в следующем примере.
var a={},b,a1={},b1;
a[b]=0;a1[b1]=1;
Object.defineProperty(window, "d0", {
  get: function () {
    return a[b];
  },
  set: function (v) {
    a[b]=v;
  }
});
Object.defineProperty(window, "d1", {
  get: function () {
    return a1[b1];
  },
  set: function (v) {
    a1[b1]=v;
  }
});
for(var i=0;i<2;i++){
    window["d"+i]++;
    // или еще что-то
}
alert(a[b]+', '+a1[b1]);

kaf 25.10.2012 12:02

oneguy Много глобальных переменных, мне кажется, не есть хорошо. Чуть подправил, получилась основа нужного мне механизма.
function F(){
    this.counter=0;
    var self=this;
    this.bind=bind;
    function bind(a,b){
        var link='link_'+self.counter;
        Object.defineProperty(window, link, {
             get: function () {
                 return a[b];
             },
             set: function (v) {
                 a[b]=v;
             }
        });
        self.counter++;
        return link;
    }
}

var f=new F();
var d=[];

var a={},b;
a[b]=0;
d.push(f.bind(a,b));

var a1={},b1;
a1[b1]=1;
d.push(f.bind(a1,b1));

for(var i=0;i<d.length;i++){
    window[d[i]]++;
    // или еще что-то
}
alert(a[b]+', '+a1[b1]);


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