Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 24.10.2012, 20:54
kaf kaf вне форума
Интересующийся
Отправить личное сообщение для kaf Посмотреть профиль Найти все сообщения от kaf
 
Регистрация: 25.06.2012
Сообщений: 24

Синхронизация со значением объекта
так не работает
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]);

можно ли упростить логику синхронизации со значением объекта?
Ответить с цитированием
  #2 (permalink)  
Старый 24.10.2012, 21:17
Профессор
Отправить личное сообщение для oneguy Посмотреть профиль Найти все сообщения от oneguy
 
Регистрация: 31.05.2012
Сообщений: 396

Можно использовать аксессорные свойства объектов, правда, они не работают в 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]);
Ответить с цитированием
  #3 (permalink)  
Старый 24.10.2012, 21:33
kaf kaf вне форума
Интересующийся
Отправить личное сообщение для kaf Посмотреть профиль Найти все сообщения от kaf
 
Регистрация: 25.06.2012
Сообщений: 24

Спасибо, не знал об этом способе.

Правда, мне нужна возможность синхронизации с любым доступным объектом (его значением). А здесь строгая привязка к a[b]

Да и начальство требует IE8+
Ответить с цитированием
  #4 (permalink)  
Старый 24.10.2012, 22:12
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

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_, 24.10.2012 в 22:26.
Ответить с цитированием
  #5 (permalink)  
Старый 24.10.2012, 22:22
Профессор
Отправить личное сообщение для oneguy Посмотреть профиль Найти все сообщения от oneguy
 
Регистрация: 31.05.2012
Сообщений: 396

Сообщение от kaf
Спасибо, не знал об этом способе.

Правда, мне нужна возможность синхронизации с любым доступным объектом (его значением). А здесь строгая привязка к a[b]
Это не проблема. В качестве сеттера и геттера свойства можно использовать любые функции. Я привёл лишь пример использования геттера и сеттера.
Цитата:
Да и начальство требует IE8+
Только что прочитал, что в IE 8 аксессорные свойства можно создать для DOM объектов. window является таким объектом, но почему-то мой код в IE 8 не работает.
Ответить с цитированием
  #6 (permalink)  
Старый 24.10.2012, 22:59
kaf kaf вне форума
Интересующийся
Отправить личное сообщение для kaf Посмотреть профиль Найти все сообщения от kaf
 
Регистрация: 25.06.2012
Сообщений: 24

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]);
Ответить с цитированием
  #7 (permalink)  
Старый 24.10.2012, 23:12
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

это?
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #8 (permalink)  
Старый 24.10.2012, 23:38
Профессор
Отправить личное сообщение для oneguy Посмотреть профиль Найти все сообщения от oneguy
 
Регистрация: 31.05.2012
Сообщений: 396

Сообщение от Дзен-трансгуманист Посмотреть сообщение
Ну это вряд ли...
alert(window instanceof Node); // false

Так-то корнем является document, так что разве что через него, и потом, опционально, через with. Но это не наилучшая идея, имхо.
Да нет, в IE 8 в window тоже можно добавлять аксесорные свойства.
Оказывается, дело было в 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]);

Последний раз редактировалось oneguy, 24.10.2012 в 23:49.
Ответить с цитированием
  #9 (permalink)  
Старый 24.10.2012, 23:40
kaf kaf вне форума
Интересующийся
Отправить личное сообщение для kaf Посмотреть профиль Найти все сообщения от kaf
 
Регистрация: 25.06.2012
Сообщений: 24

nerv_ Нет. Мне нужен механизм для доступа к актуальным значениям "подписанных элементов", чтобы, например, по таймеру или по команде извне выполнять определенные действия с учетом текущих значений.

Последний раз редактировалось kaf, 24.10.2012 в 23:46.
Ответить с цитированием
  #10 (permalink)  
Старый 24.10.2012, 23:47
Профессор
Отправить личное сообщение для oneguy Посмотреть профиль Найти все сообщения от oneguy
 
Регистрация: 31.05.2012
Сообщений: 396

Сообщение от kaf
nerv_, oneguy Предполагается создать контейнер (массив d для примера), в который можно "подписать" на определенное действие любые "элементы" любых объектов по ссылке.
В текущих браузерах это реализуется легко и удобно с помощью геттеров/сеттеров похоже тем примерам, которые я писал, а в IE 8 это сделать, по-видимому, невозможно, так как там в нативные объекты нельзя добавить аксессорные свойства.

Последний раз редактировалось oneguy, 24.10.2012 в 23:52.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
IE 8 Не удалось получить значение свойства "match": значением объекта является null abstract Internet Explorer 2 26.08.2011 15:27
Скрипт вычисления координат объекта banderasantonio197555 Events/DOM/Window 4 16.08.2011 17:37
прямая от первого объекта до второго ntro123 Events/DOM/Window 5 09.05.2011 08:41
Можно ли получить имя экземпляра объекта внутри самого объекта? Ichigeki Общие вопросы Javascript 9 14.11.2008 19:00
Не работает перебор свойств объекта BANick Общие вопросы Javascript 1 16.09.2008 22:46