Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   ссылка на объект в функции (https://javascript.ru/forum/misc/16477-ssylka-na-obekt-v-funkcii.html)

hotcooler17 10.04.2011 01:16

ссылка на объект в функции
 
Никак не могу найти ответ на, казалось бы, простой вопрос.
Как создать глобальный экземпляр класса внутри функции по ссылке на глобальную переменную? JS не знаю, написал так, как бы сделал это на c++.
var Some={};

function MyObj()
{
    this.val = 5;
}

function CreateSomeObj(globalVar)
{
    globalVar = new MyObj();
}

CreateSomeObj(Some);


Так не работает. Вернее объект выходит из области видимости после конца функции. Как же быть?

B@rmaley.e><e 10.04.2011 01:34

Еще бы: Вы локальной переменной, содержащей ссылку на window.Some, присваиваете ссылку на новый объект. Само собой, window.Some совсем не изменится.
function CreateSomeObj()
{
    globalVar = new MyObj();
}

CreateSomeObj();

hotcooler17 10.04.2011 01:47

Боюсь, вы не поняли сути проблемы. Обрисую по другому. Есть PHP скрипт, который генерирует js код для клиента. В зависимости от прав доступа в конечный код включены разные глобальные переменные, объекты в которых, в той или иной мере, одинаковы. Т.е. на момент вызова функции CreateSomeObj не известно кол-во и имена глобальных переменных. По сути от функции требуется создавать объекты, которые частично идентичны друг другу. Иными словами - таблица с одинаковыми размерами и полями, но разными данными.

Aetae 10.04.2011 05:31

function MyObj()
{
    this.val = 5;
}

function CreateSomeObj(globalVar)
{
    window[globalVar] = new MyObj();
}

CreateSomeObj('Some');

alert(Some.val)

Скорей всего, это неверное решение неверно(для js) поставленной задачи, но большего не вникая не понять.

hotcooler17 10.04.2011 14:40

Спасибо, работает. Если вам интересна задача - используется grid из ExtJS для чтения/редактирования таблиц. Таблиц много, у разных пользователей - разные права доступа к ним. В зависимости от этого php генерирует разный код для js. Цель этого решения - минимизировать разницу выходного(из php) результата. По сути функция должна получать набор входных данных, разбивать их (некоторые данные для ColumnModel, другие - для Store), создавать 4 объекта на основе данных - вкладка, стор, модель колонок и сам грид. Под данными в этом случае понимается не содержимое таблиц, а "конфиги" объектов.


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