Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Интерфейсы в javascript (https://javascript.ru/forum/misc/14657-interfejjsy-v-javascript.html)

Kolyaj 28.01.2011 10:30

Цитата:

Сообщение от sysif
Известный факт, что в js часто взаимодействие между разными объектами оборачивается головной болью.

Цитата:

Сообщение от x-yuri
и очень интересует всем кроме меня известный факт про головные боли от взаимодействия объектов?

Мне тоже неизвестен этот факт.

sysif 28.01.2011 11:38

Цитата:

Сообщение от Kolyaj (Сообщение 90123)
Мне тоже неизвестен этот факт.

Ну, я про все ту же утипизацию и что из нее вытекает. Если у нас возникла ошибка выполнения, мы идем ее и правим - вылезает другая ошибка - правим...и т.п...а тут оказывается, что первый случай опять сломался. Такие вот замечательные итерации.

Это не головные боли?

Вот отсюда и возникают идеи ввести какие-то соглашения при взаимодейстии объектов

Kolyaj 28.01.2011 11:44

Я уже писал
Цитата:

Сообщение от Kolyaj
Я уже лет 7 пишу на динамических языках, не помню ни одной ошибки, возникшей из-за несоответствия типов. Они были, это однозначно, но я их не помню, потому что это скорее опечатки, они не стоят внимания.


B~Vladi 28.01.2011 11:45

Цитата:

Сообщение от sysif
а тут оказывается, что первый случай опять сломался

Может не в тему, но у меня есть подозрение, что код сам ломается если его долго не использовать.:blink:
Вот написал я скрипт, вроде работает.:write:
Кинул в папку к остальным исходникам. Через месяц запускаю, а он не работает:D

Магия :)

Kolyaj 28.01.2011 11:46

Цитата:

Сообщение от B~Vladi
Через месяц запускаешь, а он не работает

Протух.

kidar2 28.01.2011 11:46

Приведу пример с интерфейсом IDisposable (как в C#), который имеет один метод Dispose.
Пусть у меня есть система, с большим кол-ом различных js классов. Во избежание утечек памяти у меня есть некий Manager для контроля всех ссылок на созданные объекты. Когда какой-то объект мне не нужен я вызываю у него метод Dispose, а будет ли он за собой чистить свои внутренние ресурсы, это уже его проблема. Т.е. здесь возникает такое соглашение: если Manager'у отдаётся на управление какой-то объект, то он должен реализовывать интерфейс IDisposable.

Но как уже приводились ссылки в начале обсуждения, нужно просто проверить есть ли такой метод/свойство в объекте и если нету, то как вариант кидать Exception.

sysif 28.01.2011 11:51

Цитата:

Сообщение от B~Vladi (Сообщение 90138)
Может не в тему, но у меня есть подозрение, что код сам ломается если его долго не использовать.:blink:
Вот написал я скрипт, вроде работает.:write:
Кинул в папку к остальным исходникам. Через месяц запускаю, а он не работает:D

Магия :)

Ага, а вера в волшебство пропадает, когда понимаете, что вы там не один ковырялись, да?
Вы когда ручку на двери не заметите, за какое место хвататься будете, и если не знаете, в какую сторону дверь открывается? :)

sysif 28.01.2011 11:56

Цитата:

Сообщение от kidar2 (Сообщение 90141)

Но как уже приводились ссылки в начале обсуждения, нужно просто проверить есть ли такой метод/свойство в объекте и если нету, то как вариант кидать Exception.

Ну обычно в таких случаях делается что-то типа if(obj.method) obj.method();
Что так-то проблемы быстро локализовать ни разу не помогает

kidar2 28.01.2011 12:02

Цитата:

Сообщение от sysif (Сообщение 90145)
Ну обычно в таких случаях делается что-то типа if(obj.method) obj.method();
Что так-то проблемы быстро локализовать ни разу не помогает

Я имел ввиду примерно такое
if (!obj.Dispose)
throw new Error("Метод или свойство не реализовано");

И делать эту проверку в момент когда, один объект отдаётся другому.
Тогда с локализацией проблем не будет.

sysif 28.01.2011 12:52

Цитата:

Сообщение от kidar2 (Сообщение 90149)
Я имел ввиду примерно такое
if (!obj.Dispose)
throw new Error("Метод или свойство не реализовано");

И делать эту проверку в момент когда, один объект отдаётся другому.
Тогда с локализацией проблем не будет.

Ну да, и так последовательно, для каждой функции?


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