Javascript-форум (https://javascript.ru/forum/)
-   Internet Explorer (https://javascript.ru/forum/css-html-internet-explorer/)
-   -   Как получить доступ к переменным класса в IE? (https://javascript.ru/forum/css-html-internet-explorer/13877-kak-poluchit-dostup-k-peremennym-klassa-v-ie.html)

unbreaker88 18.12.2010 17:40

Как получить доступ к переменным класса в IE?
 
Здравствуйте. У меня стоит задача получить доступ к переменным на странице, а точнее к переменным класса. Для этого я перебираю циклом for...in все свойства объекта window:


var classA = function(){
}

var a = new classA();
var b = new classA();
var z = new Date();

for (var k in window) {
        if (typeof (window[k]) == "object" && window[k] instanceof classA) { // Здесь IE выдает ошибку
                alert('Variable ' + k + ' is a classA');
        }
}


В опере и хроме скрипт отрабатывает правильно, находит переменные a и b. Чего не скажешь про IE, который просто выдает ошибку в строке 9: "предполагается наличие объекта". Получается, что IE попросту не видит эти переменные в цикле. При этом мне нужно, чтобы скрипт работал именно под IE.
В чем может быть проблема?

Kolyaj 18.12.2010 23:08

Это особенность IE, ничего не поделать. Используйте массивы/объекты.

unbreaker88 18.12.2010 23:56

Цитата:

Сообщение от Kolyaj (Сообщение 84369)
Это особенность IE, ничего не поделать. Используйте массивы/объекты.

а каким образом использовать массивы? обьясните пожалуйста подробнее. Дело в том, что у меня нет никакой информации о созданных объектах, кроме имени класса.

Kolyaj 19.12.2010 07:49

А зачем вообще что-либо пихать в глобальную область видимости?
А чтобы понять, что вам делать, нужно узнать, зачем вам это.

unbreaker88 19.12.2010 11:48

Цитата:

Сообщение от Kolyaj
А зачем вообще что-либо пихать в глобальную область видимости?
А чтобы понять, что вам делать, нужно узнать, зачем вам это.

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

x-yuri 19.12.2010 17:47

все еще хуже, for( var k in window ) не видит глобальные переменные... а каким образом твой скрипт внедряется в страницу?

unbreaker88 19.12.2010 19:32

Цитата:

Сообщение от x-yuri (Сообщение 84437)
все еще хуже, for( var k in window ) не видит глобальные переменные... а каким образом твой скрипт внедряется в страницу?

Там система специфическая. Cognos 8, если встречался с таким. Там с помощью пользовательского интерфейса можно добавлять куски джаваскрипта, которые затем выполняются при запуске наряду со скриптом, сгенерированным системой автоматически (в нем же и создаются объекты, к которым я и хочу получить доступ с внедренного скрипта).

x-yuri 19.12.2010 21:03

а нельзя конструктор переопределить, чтобы он следил за созданием объектов? (возможно, реализацию нужно будет подправить)
var oldClassA = classA;
var classA = function(){
    if( ! classA._instances )
        classA._instances = [];
    var o = oldClassA.apply(this, arguments) || this;
    classA._instances.push( o );
    return o;
}

unbreaker88 19.12.2010 22:31

Цитата:

Сообщение от x-yuri (Сообщение 84472)
а нельзя конструктор переопределить, чтобы он следил за созданием объектов? (возможно, реализацию нужно будет подправить)
var oldClassA = classA;
var classA = function(){
    if( ! classA._instances )
        classA._instances = [];
    var o = oldClassA.apply(this, arguments) || this;
    classA._instances.push( o );
    return o;
}

Переопределить конструктор возможно, но я уже нашел другое решение, всем спасибо за помощь!

x-yuri 19.12.2010 23:06

Цитата:

Сообщение от unbreaker88
но я уже нашел другое решение

так расскажи, может кому пригодится ;)


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