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

with-love-from-siberia 26.01.2011 21:10

Возвращаясь к разговору об интерфейсах в js, стоит сказать, что интерфейсы неявно представлены в языке в виде методов call и apply.

x-yuri 26.01.2011 22:03

а можно развернуть мысль?

with-love-from-siberia 26.01.2011 23:09

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

Интерфейсы суть вариант множественного наследования. Объекты, порожденные от разных классов, но реализующих один интерфейс, имеют одинаковое поведение. А это уже полиморфизм. То есть, разные объекты, наследующие одинаковый интерфейс имеют одинаковый контекст вызова. Не совсем точно, но (как мне кажется) близко по смыслу к идее вызова методов одного объекта в контексте другого. Что и выполняют эти функции.

var x = [1.2, 3.4, 5];
var y = ''.split.call(x, /\W/);

alert(x);
alert(y);

x-yuri 27.01.2011 00:05

мысль более-менее понятна, но считаю натянута. Назвать контекстом вызова такую абстрактную сущность как интерфейс... Причем получается, что берем мы метод у конкретного объекта, а вызываем в контексте абстрактного интерфейса. Как-то все вверх ногами

Да и просто, интерфейсы не нужны в javascript. Обоснование. Зачем нужны интерфейсы:
1) возможность работать с разными объектами через один и тот же интерфейс (поддерживается автоматом)
2) проверка типов (бессмысленна в языке с динамической типизацией)
3) некое документирование кода (имхо, имеет смысл только в дополнение к пунктам выше)

with-love-from-siberia 27.01.2011 10:39

Мои слова не следует понимать буквально. Речь идет, всего лишь, об аналогиях.

Цитата:

интерфейсы не нужны в javascript
Конечно не нужны. Они не нужны в динамических языках.

sysif 28.01.2011 06:59

Если считать, что интерфейсы - это соглашения в коде между разными частями в системе, то имхо они вполне имеют право на существование в js.
Известный факт, что в js часто взаимодействие между разными объектами оборачивается головной болью.
Т.о. в js функцией интерфейса могла бы быть просто проверка, что объект реализует заданный набор методов с указанными сигнатурами.
Примерно так были реализованы интерфейсы в microsoft ajax - http://www.cristiandarie.ro/asp-ajax/Person3.html. Хотя, в общем-то неудачный пример. Еще интерфейсы вроде есть в php.

P.S. Это конечно, если оставить в стороне тот факт, что реализация этого дела поверх js - тот еще костыль

x-yuri 28.01.2011 07:58

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

sysif 28.01.2011 09:08

Может быть, вы тогда с такой же уверенностью скажете, зачем в языке с динамической типизацией конструкции instanceOf и typeof ?

x-yuri 28.01.2011 09:57

прям в тупик загнали :) Может можете какой-нибудь реальный пример, где бы в js пригодились интерфейсы?

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

B~Vladi 28.01.2011 10:30

Цитата:

Сообщение от x-yuri
головные боли от взаимодействия объектов

Меня не интересует. Всё зависит от архитектуры.


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