Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   функция внутри объекта (не работает в IE) (https://javascript.ru/forum/misc/8136-funkciya-vnutri-obekta-ne-rabotaet-v-ie.html)

Скриптор 10.03.2010 06:23

функция внутри объекта (не работает в IE)
 
o = {a:7, get b() {return this.a+1; }, set c(x) {this.a = x/2}};

alert( o.b )

alert( o.c )

Я потерялся:
Как добится подобного в IE? ( Mozilla работает идеально.)

Скриптор 10.03.2010 07:05

:write: И самый сок, что Mozilla при такой коде:
o = {
     'a':7,
     'b': function() { return this.a+1; }
   };

alert( o.b )
благополучно вешается,
а вот IE спокойно выдаёт "function() { return this.a+1; }" (хотя всё же от него требовалось это выполнить, а не строку выдавать!)
И eval() тут тоже не помогает... :haha: В общем, занятно оказалось!..

ZoNT 10.03.2010 11:51

o = {
  'a': 7,
  'b': function(){return this.a+1}
};	 
alert( o.b() )

subzey 10.03.2010 13:17

Яваскриптовых геттеров и сеттеров в IE до 8 версии нет.
Варианта обхода этого два:
  1. VBScript. Объект, созданный vbs, доступен js, и в vbs есть-таки и геттеры и сеттеры. Вот, только, добавить свойств к таким элементам нельзя и прототипами они быть не могут, так что, считай, бесполезная вещь.
  2. DOM-элемент и onpropertychange. То-бишь, создаем коммент, прицепляем его к document, а потом при изменении любого из его свойств получим вызов события. Если не критично наличие «левых» свойств у объекта, то вполне юзабельно. Минусы: опять-таки, забудьте про прототипы, а если создадите пару тысяч таких объектов, то производительность Вас уже не порадует.

Как-то так…

Kolyaj 10.03.2010 13:30

Цитата:

Сообщение от Скриптор
хотя всё же от него требовалось это выполнить, а не строку выдавать!

Где это вы от него такое потребовали?

Скриптор 10.03.2010 16:44

2_ZoNT: Скобочки к функции оказались действительно не лишние. Ты отгадал! :victory:


2_subzey:
Цитата:

Яваскриптовых геттеров и сеттеров в IE до 8 версии нет.
Поверил. Проверил:
o = {a:7, get b() {return this.a+1; }, set c(x) {this.a = x/2}};  

 alert( o.b() )
Ослик (8-ая модель) всё равно упирается, пишет: Предполагается наличие знака ':'


2_Kolyaj:
Вобще-то это я так неумело пытался получить доступ к элементу ассоциативного массива, реализованного и виде такого объекта. :)
Как правильно в такой ситуации - до сих пор не знаю.
IE - ожидаемо выдает значение элемента такого массива (даже если внутри функция), а вот (тор)Mozilla - сама вешается!

o = {a:7, get b() {return this.a+1; }, set c(x) {this.a = x/2}};  

 alert( o.b() )
Можно ли для Мозиллы что-то наподобие
//
         alert( o.b.Value  )
// или 
         alert( value o.b  ) 
// навеяно конструкцией: 
//       alert( typeof o.b )
сочинить?

Kolyaj 10.03.2010 16:53

Ничего не вешается
o = {
     'a':7,
     'b': function() { return this.a+1; }
   };
 
alert( o.b )

Скриптор 10.03.2010 18:26

И верно! Спасибо.

Моя ошибка оказалась в том, что тестировал (вернее проверял) полагаясь на HTMLPad 2010 (фирма Blumentals). Потому что вешать саму МОЗИЛЛу было жалко: открыто до 70-ти вкладок, а заново их открывать потом - целая морока.

Там подобное наблюдается при повторном вызове режима просмотра того же кода во "встроенном" (эмулируемом) Мозилле у HTMLPad.

Держу его за более-менее приемлимое отображение Unicode в редакторе.
Так что забираю слова о тормознутость Мозиллы: это какой-то глюк в реализации HTMLPad. Буду искать замену.

Как насчет остальных ньюансов, Koljay?

Kolyaj 10.03.2010 19:26

Цитата:

Сообщение от Скриптор
вешать саму МОЗИЛЛу было жалко: открыто до 70-ти вкладок

Второй профиль.

Цитата:

Сообщение от Скриптор
Как насчет остальных ньюансов, Kolyaj?

Каких именно? У вас посты сумбурные.

Скриптор 10.03.2010 19:44

Цитата:

Каких именно? У вас посты сумбурные.
Хотя в принципе проблема уже разрешена: раз Мозилла работает. Это уже я туплю. :thanks:

Цитата:

Второй профиль.
Это как? Я использую даже Менеджер сессий, но так это же каждый раз закрывать-открывать всё множество вкладок, а это требует времени (3-5 на закрытие-выгрузку Мозиллы, и столько же на открытие всего заново: 1 Гб оперативки). То есть при экспериментах и тестировании сомнительного или проблемного кода, я не очень могу себе это позволить.


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