Переключение на Главную Страницу Страницы: [1] 2  ОтправитьПечать
Горячая тема (более 10 ответов) Возможена реализация механизма JS-прототипов? (число прочтений - 6000 )
trdm
1c++ power user
qt1l developer
1c++ moderator
Отсутствует



Сообщений: 2343
Местоположение: г. Ростов-на-Дону
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Возможена реализация механизма JS-прототипов?
19. Ноября 2006 :: 12:07
Печать  
для объектов 1С с пом 1С++?
Не слишком хорошо изучил мханизм классов JScript, но понравилось пара вещей.....
Тот же самый механизм прототипов, расширяющий возможности класса.

Каждый раз когда необходимо воспользоваться "Расширенными" возможностями приходится создавать экземпляр класса, инициализировать и использовать его.
А при вводе механизма прототипов (конечно, в случае возможности такого механизма) дополнительные процедуры и функции прототипов класса сами добавятся ко всем экземплярам стандартного объекта 1С.
Думаю будет удобно и при осторожном использовании безопасно.
Осуществимая вещь? Уж не говоря про удобство...
  
Наверх
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Возможена реализация механизма JS-прототипов?
Ответ #1 - 19. Ноября 2006 :: 16:50
Печать  
Если честно мысль не понял.
Если нужно пользоваться JS то не проще в обертку завернуть
Код
Выбрать все
Скрипт = СоздатьОбъект("MSScriptControl.ScriptControl");
Скрипт.Language = "javascript"; 

  
Наверх
 
IP записан
 
trdm
1c++ power user
qt1l developer
1c++ moderator
Отсутствует



Сообщений: 2343
Местоположение: г. Ростов-на-Дону
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Возможена реализация механизма JS-прототипов?
Ответ #2 - 19. Ноября 2006 :: 17:10
Печать  
Поясню.
Есть объект встроенного языка: СписокЗначений. (к примеру на форме с идентификатором СЗВид)
Чесно говоря надоело писать кажный раз:
Код
Выбрать все
Если СЗВид.ТекущаяСтрока() = 0 Тогда
    Возврат;
Иначе
    вЗначениеВида = СЗВид.ПолучитьЗначение(СЗВид.ТекущаяСтрока());
    Если вЗначениеВида = вНужныйВид Тогда
	  ....... 


Допустим есть возможность расширить функционал стандартного списока значений без механизма подклассификации (использование классов).
пишем в модуле прототипа:
Код
Выбрать все
Функция ПолучитьТекущееЗначение(псСсылка) Экспорт
    вЗначВозврата = "";
    Попытка
	  вТекСтрока = псСсылка.ТекущаяСтрока();
	  Если вТекСтрока<>0 Тогда
		Возврат псСсылка.ПолучитьЗначение( вТекСтрока );
	  КонецЕсли
    Исключение
	  Сообщить("Ошибка вызова функции!","!");
    КонецПопытки;
    Возврат вЗначВозврата;
КонецФункции 


Тогда в любом модуле можно свободно писать:
Код
Выбрать все
    Если СЗВид.ПолучитьТекущееЗначение() = вНужныйВид Тогда
	  ....... 


И все....
  
Наверх
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Возможена реализация механизма JS-прототипов?
Ответ #3 - 19. Ноября 2006 :: 17:15
Печать  
Так в чем проблема, создавай класс не СписокЗначений, а какой-то свой. Переопредели методы + добавь свои.

Брр...Все равно не понимаю Улыбка
  
Наверх
 
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Возможена реализация механизма JS-прототипов?
Ответ #4 - 19. Ноября 2006 :: 17:16
Печать  
А... пропустил, что СЗ на форме...
  
Наверх
 
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Возможена реализация механизма JS-прототипов?
Ответ #5 - 19. Ноября 2006 :: 17:18
Печать  
Я обычно использую текстовый реквизит с педалькой + ПриНачалеВыбораЗначения + переопределенный класс СЗ. И проблема отпадает.
  
Наверх
 
IP записан
 
trdm
1c++ power user
qt1l developer
1c++ moderator
Отсутствует



Сообщений: 2343
Местоположение: г. Ростов-на-Дону
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Возможена реализация механизма JS-прототипов?
Ответ #6 - 19. Ноября 2006 :: 17:22
Печать  
Конечно, можно класс, но:
Минусы:
+ объект МД
+ дополнительные строки в каждом модуле для инициализации класса.
Конечно, можно дополнительную функцию в глобальник, но:
она как-бы "служебная" и не к месту там, вроде...
  
Наверх
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Возможена реализация механизма JS-прототипов?
Ответ #7 - 20. Ноября 2006 :: 06:16
Печать  
Просто нам в 1С++ не хватает нормальных конструкторов типа
Объект = СоздатьОбъект("ИмяКласса", Парам1, Парам2, ..., ПарамН);
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer &amp;&amp; tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
trdm
1c++ power user
qt1l developer
1c++ moderator
Отсутствует



Сообщений: 2343
Местоположение: г. Ростов-на-Дону
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Возможена реализация механизма JS-прототипов?
Ответ #8 - 20. Ноября 2006 :: 08:40
Печать  
artbear писал(а) 20. Ноября 2006 :: 06:16:
Просто нам в 1С++ не хватает нормальных конструкторов типа
Объект = СоздатьОбъект("ИмяКласса", Парам1, Парам2, ..., ПарамН);

Ну, это не совсем туда. Я имел ввиду "безусловное" расширение.
По этому и привел JS-прототипы. у них при добавлении свойства/функции к классу это свойство добавляется у ВСЕХ экземпляров данного объекта....
  
Наверх
IP записан
 
trdm
1c++ power user
qt1l developer
1c++ moderator
Отсутствует



Сообщений: 2343
Местоположение: г. Ростов-на-Дону
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Возможена реализация механизма JS-прототипов?
Ответ #9 - 21. Ноября 2006 :: 12:30
Печать  
Так чего? Невозможно или ненужно?
  
Наверх
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Возможена реализация механизма JS-прототипов?
Ответ #10 - 28. Ноября 2006 :: 15:54
Печать  
trdm писал(а) 21. Ноября 2006 :: 12:30:
Так чего? Невозможно или ненужно?

Это нужно.

И мысли на эту тему есть, как построить грамотную систему организации динамической иерархии классов.
Я, может, даже спецификацию как-нибудь набросаю.

Одна беда - на дворе новый год - жара, жара - жареное солнце больших городов.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
trdm
1c++ power user
qt1l developer
1c++ moderator
Отсутствует



Сообщений: 2343
Местоположение: г. Ростов-на-Дону
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Возможена реализация механизма JS-прототипов?
Ответ #11 - 28. Ноября 2006 :: 16:48
Печать  
kms писал(а) 28. Ноября 2006 :: 15:54:
trdm писал(а) 21. Ноября 2006 :: 12:30:
Так чего? Невозможно или ненужно?

Это нужно.

И мысли на эту тему есть, как построить грамотную систему организации динамической иерархии классов.
Я, может, даже спецификацию как-нибудь набросаю.

Одна беда - на дворе новый год - жара, жара - жареное солнце больших городов.

Святое дело ).
Не знаю как на счет иерархии, но меня парит каждый раз писать
Код
Выбрать все
поз = СЗВидовДокументов.НайтиЗначение("Все");
если поз<>0 тогда
    СЗВидовДокументов.УдалитьЗначение(поз);
КонецЕсли;
 


Один раз присоединить прототип с доп. функцией к спискуЗначений и описать там процедуру:
Код
Выбрать все
ПрототипПроцедуры УдалитьЗначениеПриНаличии(ЭтотОбъект, псЗначение)
    поз = ЭтотОбъект.НайтиЗначение(псЗначение);
    если поз<>0 тогда
	  ЭтотОбъект.УдалитьЗначение(поз);
    КонецЕсли;
КонецПрототипаПроцедуры
 


УдалитьЗначениеПриНаличии()
И можно смело везде писать:
Код
Выбрать все
СЗВидовДокументов.УдалитьЗначениеПриНаличии("Все");
 

  
Наверх
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Возможена реализация механизма JS-прототипов?
Ответ #12 - 28. Ноября 2006 :: 19:26
Печать  
trdm писал(а) 28. Ноября 2006 :: 16:48:
Святое дело ).

Дык... Отдохнуть-то как раз и не придется...
Впрочем, это как всегда, ничего нового. Подмигивание

Цитата:
Не знаю как на счет иерархии, но меня парит каждый раз писать
...
Один раз присоединить прототип с доп. функцией к спискуЗначений и описать там процедуру:
...
И можно смело везде писать:

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

В плане общих - ты описал.
В плане конкретных - меня тоже парит писать:

Код
Выбрать все
Процедура _ДобавитьСтроку(__т, __код1, __код2)
__т.НоваяСтрока();
__т.Код1 =__код1;
__т.Код2 =__код2;
КонецПроцедуры

_т =СоздатьОбъект("ТаблицаЗначений");
_т.НоваяКолонка("код1");
_т.НоваяКолонка("код2");

_ДобавитьСтроку(_т, 1, 2);
_ДобавитьСтроку(_т, 4, 5);
 



При этом, как я вижу
1. _ДобавитьСтроку() - должна быть членом класса-расширения таблицы значений
2. _ДобавитьСтроку() - не является общим объектом, т.е. действует только в рамках выбранного контекста (в других таблицах и число колонок и их названия могут быть другими)
3. Совершенно не хочется подобную иерархию делать статической - фактор времени прежде всего

P.S.
Когда это все будет сделано, и будет ли - большой вопрос.
Тут мое дело поддержать твою идею - поругают другие Улыбка
(ну, по крайней мере обычно ругают, по разным причинам - и техническим и идеологическим).
  

De quelle planète es-tu?
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Возможена реализация механизма JS-прототипов?
Ответ #13 - 28. Ноября 2006 :: 20:54
Печать  
+
Наверное, в итоге хотелось бы совместить концепции полиморфизма и аспектно-ориентированной разработки.

Добавлю, что проблемы AOD (причем обостроенные в условиях отсутствия средств визуализации и отладки применительно к 1С/1CPP) я воспринимаю совершенно сознательно - и тем не менее считаю идею перспективной.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
trdm
1c++ power user
qt1l developer
1c++ moderator
Отсутствует



Сообщений: 2343
Местоположение: г. Ростов-на-Дону
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Возможена реализация механизма JS-прототипов?
Ответ #14 - 28. Ноября 2006 :: 22:57
Печать  
kms писал(а) 28. Ноября 2006 :: 19:26:
Я называю эти добавки примесями.
И они могут быть как общими для всех объектов вида, либо заданными для конкретного класса.
Реализация, конечно, разная, но результат нужен однотипный.

В плане общих - ты описал.
В плане конкретных - меня тоже парит писать:

Код
Выбрать все
Процедура _ДобавитьСтроку(__т, __код1, __код2)
__т.НоваяСтрока();
__т.Код1 =__код1;
__т.Код2 =__код2;
КонецПроцедуры

_т =СоздатьОбъект("ТаблицаЗначений");
_т.НоваяКолонка("код1");
_т.НоваяКолонка("код2");

_ДобавитьСтроку(_т, 1, 2);
_ДобавитьСтроку(_т, 4, 5);
 



в общем для всех Таблиц значений в прототипе это выглядело бы так:
Код
Выбрать все
ПрототипПроцедуры _ДобавитьСтроку2(__т, __Парам1, __Парам2)
__т.НоваяСтрока();
__т.УстановитьЗначение(__т.КоличествоСтрок(),[b]1[/b],__Парам1);
__т.УстановитьЗначение(__т.КоличествоСтрок(),[b]2[/b],__Парам2);
КонецПрототипаПроцедуры

ПрототипПроцедуры _ДобавитьСтроку3(__т, __Парам1, __Парам2,__Парам3)
...
 


Так будет удобнее? Подмигивание
  
Наверх
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать