Не понял. Где ты у меня синглетон нашел в коде? :-) Там как раз множество объектов.
Ну конечно, ты просто кастнул (жестоко) жабаскриптовый объект к opaque типу
Короче, ответ по существу такой: JS.var нужен, чтобы в каких-то местах можно было обойтись без JS.do. Потому что JS.do самое низкоуровневое средство из всех (полный аналог асмовских вставок).
Если ты боишься, что JS.var начнут расползаться по модулям, в которых нет IMPORT JS, то можно запретить экспорт таких полей и экспорт процедур с такими аргументами.
Смотри, мой поинт такой, что человек пишущий биндинг, должен хорошо разбираться в том, что у него на выходе получится. То есть он должен знать и жабаскрипт и оберон. Иначе точно будет лажа. Поэтому возможность работы только через "асмовые вставки" - это хорошо. Это гарантирует что человек хотя бы js знает. И понимает что там нагенерил компилер (может это прочесть и понять).
Вообще, по крайней мере ПОКА я не боюсь что оно что-то куда-то там растекаться начнет, просто из за отсутствия пользовательской базы :-) Бояться должны те, кто этим попытаются воспользоваться, ибо в будущих версиях все это может сильно измениться (соответственно биндинги писанные в таком стиле отвялятся), а вот JS.do - останется :-)
Если хочется что-то сочинить такое для модуля JS, что позволяло бы по большей части обходиться без JS.do, то тут на самом деле сильно думать нужно. Вот такими вот костылями быстро слепленными, эту задачу с наскоку не решить. Но я думать в ту сторону сейчас не могу - мне прыгать надо (биндинги и либы писать), и мне для этих подпрыгиваний замена JS.do не нужна.
Зато после наработки опыта написания биндингов через JS.do возможно станет понятны некие постоянно повторяющиеся паттерны (при написании оных биндингов), которые действительно будет иметь смысл внести в JS (в частности я чувствую что меня местами подзадолбает проверка динамических типов при биндинге к сторонним библиотекам (которые не описаны в каком-либо стандарте) - чтобы гарантировать что внезапно значение левого типа не расползлось по всей программе)..