Форум программистов, компьютерный форум, киберфорум
JavaScript
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
69 / 69 / 22
Регистрация: 06.06.2013
Сообщений: 404

Несколько контекстов

01.05.2014, 12:54. Показов 1066. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
столкнулся с ситуацией множественного вызова функции в контексте другой функции, которой необходим этот контекст. но она получит его только, если будет объявлена в этом контексте, к примеру:


JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
  randomer = function(stacks, length) {
    var i, mas, n, result, _i, _j;
    result = [];
    for (i = _i = 0; 0 <= stacks ? _i <= stacks : _i >= stacks; i = 0 <= stacks ? ++_i : --_i) {
      mas = result[i] = [];
      for (n = _j = 0; 0 <= length ? _j <= length : _j >= length; n = 0 <= length ? ++_j : --_j) {
        randomer._a(mas, n, length);
      }
    }
    return console.log(result);
  };
  randomer._a = function(mas, index, length) {
    var random;
    random = ~~(Math.random() * length);
    if (!mas[random]) {
      return mas[random] = index;
    } else {
      return randomer._a(mas, index, length);
    }
  };
где в функции randomer множество раз должна вызваться некоторая другая функция randomer._a, но чтобы не создавать каждый раз функцию randomer._a вызывая функцию randomer, я отделил её объявление и не создаю её больше в randomer, и соответственно теряю контекст randomer с аргументами stacks, length, поэтому приходится передавать их функции в не контекста каждый раз

так вот у меня вопрос, как можно было бы сделать по-изящнее, чтобы использовать контекст randomer в функции randomer._a, но не объявлять randomer._a в randomer

спасибо
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
01.05.2014, 12:54
Ответы с готовыми решениями:

Несколько контекстов на основе одного LinqToSql проекта
Собственно проблема вот в чем: допустим, у меня есть много табличек, причем структурно они не различаются, то есть связи все одинаковые, но...

SSL синхронизация контекстов
Доброго дня! Есть старый ТЦП-сервер, работающий по схеме форк на клиента + по получению определенной команды (аутентификация клиента) еще...

Ошибка при создании двух контекстов
Здравствуйте. Есть класс, который хранит HWND объекта отрисовки. Так же есть функция, которая инициализирует openGL и производит отрисовку:...

4
Просто любитель
 Аватар для GuardCat
626 / 464 / 120
Регистрация: 20.01.2011
Сообщений: 865
Записей в блоге: 2
01.05.2014, 23:41
Довольное странный подход к вопросу. На мой взгляд, есть более простое решение: this метода — его родительский объект. И вы можете просто использовать массив this.arguments для доступа к актуальным аргументам родительской функции.
1
69 / 69 / 22
Регистрация: 06.06.2013
Сообщений: 404
02.05.2014, 01:41  [ТС]
да нет this будет window, потому что функция объявлена в контексте window

а еще наверно лучше будет:
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
param = {
  stacks: 2,
  length: 6,
  randomer: function() {
    var i, n, result, _i, _j;
    result = [];
    for (i = _i = 0; 0 <= (this.stacks ? _i <= this.stacks : _i >= this.stacks; i = 0 <= this.stacks ? ++_i : --_i) {
      this.mas = result[i] = [];
      for (n = _j = 0; 0 <= this.length ? _j <= this.length : _j >= this.length; n = 0 <= this.length ? ++_j : --_j) {
        this.randomer._a();
      }
    }
    return result;
  };
}
param.randomer._a = function() {
    var random;
    random = ~~(Math.random() * this.length);
    if (!this.mas[random]) {
      return this.mas[random] = this.index;
    } else {
      return randomer._a();
    }
};
 
randomer(param)
но спасибо за попытку
0
Просто любитель
 Аватар для GuardCat
626 / 464 / 120
Регистрация: 20.01.2011
Сообщений: 865
Записей в блоге: 2
02.05.2014, 06:39
Лучший ответ Сообщение было отмечено vooduq как решение

Решение

vooduq, из метода объекта this будет не window, а родительским объектом. Если можно, на своем примере:
JavaScript
1
2
3
4
5
6
7
8
9
function main( a, b ) {
    main.go( )
}
 
main.go = function ( ) {
  console.log( this.arguments[0], this.arguments[1] )
}
 
main( "a", "b" )
Ваше второе решение добавило некоторой экзотики в код. Первый вариант был очевиднее, на мой взгляд.
0
69 / 69 / 22
Регистрация: 06.06.2013
Сообщений: 404
02.05.2014, 13:11  [ТС]
странно, но работает, не пойму почему
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
02.05.2014, 13:11
Помогаю со студенческими работами здесь

Общий vao (vbo) для различных окон (контекстов)
У меня есть два GL окна, в которые я хочу выводить одни и те же объекты (модели). Если я создал и заполнил буферы vao и vbo для кого-то из...

Подвисание всей системы из-за аппаратно ускоренного оверлея и переключения контекстов задач
Приветствую! Суть проблемы: Когда в окне или в полноэкранном режиме открыта любая прога, использующая 3D ускорение(просмотр видео...

Зависимость между двумя ячейками: несколько водителей и несколЬко автомобилей
Подскажите, пожалуйста, как сделать зависимость между двумя ячейками? Например, когда выбираю какую-либо фамилию в ячейке...

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

Как прикрепить несколько картинок на несколько людей в списке БД
У меня есть готовая БД, Нужно сделать чтобы при выборе строки в DBGrid, выходила картинка в DBImage. и так на несколько людей в списке. что...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru