ссылка на объект в функции
Никак не могу найти ответ на, казалось бы, простой вопрос.
Как создать глобальный экземпляр класса внутри функции по ссылке на глобальную переменную? JS не знаю, написал так, как бы сделал это на c++. var Some={}; function MyObj() { this.val = 5; } function CreateSomeObj(globalVar) { globalVar = new MyObj(); } CreateSomeObj(Some); Так не работает. Вернее объект выходит из области видимости после конца функции. Как же быть? |
Еще бы: Вы локальной переменной, содержащей ссылку на window.Some, присваиваете ссылку на новый объект. Само собой, window.Some совсем не изменится.
function CreateSomeObj() { globalVar = new MyObj(); } CreateSomeObj(); |
Боюсь, вы не поняли сути проблемы. Обрисую по другому. Есть PHP скрипт, который генерирует js код для клиента. В зависимости от прав доступа в конечный код включены разные глобальные переменные, объекты в которых, в той или иной мере, одинаковы. Т.е. на момент вызова функции CreateSomeObj не известно кол-во и имена глобальных переменных. По сути от функции требуется создавать объекты, которые частично идентичны друг другу. Иными словами - таблица с одинаковыми размерами и полями, но разными данными.
|
function MyObj() { this.val = 5; } function CreateSomeObj(globalVar) { window[globalVar] = new MyObj(); } CreateSomeObj('Some'); alert(Some.val) Скорей всего, это неверное решение неверно(для js) поставленной задачи, но большего не вникая не понять. |
Спасибо, работает. Если вам интересна задача - используется grid из ExtJS для чтения/редактирования таблиц. Таблиц много, у разных пользователей - разные права доступа к ним. В зависимости от этого php генерирует разный код для js. Цель этого решения - минимизировать разницу выходного(из php) результата. По сути функция должна получать набор входных данных, разбивать их (некоторые данные для ColumnModel, другие - для Store), создавать 4 объекта на основе данных - вкладка, стор, модель колонок и сам грид. Под данными в этом случае понимается не содержимое таблиц, а "конфиги" объектов.
|
Часовой пояс GMT +3, время: 03:37. |