|
а можно развернуть мысль?
|
Попробую более развернуто. Допускаю, выскажу несколько весьма очевидных мыслей.
Интерфейсы суть вариант множественного наследования. Объекты, порожденные от разных классов, но реализующих один интерфейс, имеют одинаковое поведение. А это уже полиморфизм. То есть, разные объекты, наследующие одинаковый интерфейс имеют одинаковый контекст вызова. Не совсем точно, но (как мне кажется) близко по смыслу к идее вызова методов одного объекта в контексте другого. Что и выполняют эти функции. var x = [1.2, 3.4, 5]; var y = ''.split.call(x, /\W/); alert(x); alert(y); |
мысль более-менее понятна, но считаю натянута. Назвать контекстом вызова такую абстрактную сущность как интерфейс... Причем получается, что берем мы метод у конкретного объекта, а вызываем в контексте абстрактного интерфейса. Как-то все вверх ногами
Да и просто, интерфейсы не нужны в javascript. Обоснование. Зачем нужны интерфейсы: 1) возможность работать с разными объектами через один и тот же интерфейс (поддерживается автоматом) 2) проверка типов (бессмысленна в языке с динамической типизацией) 3) некое документирование кода (имхо, имеет смысл только в дополнение к пунктам выше) |
Мои слова не следует понимать буквально. Речь идет, всего лишь, об аналогиях.
Цитата:
|
Если считать, что интерфейсы - это соглашения в коде между разными частями в системе, то имхо они вполне имеют право на существование в js.
Известный факт, что в js часто взаимодействие между разными объектами оборачивается головной болью. Т.о. в js функцией интерфейса могла бы быть просто проверка, что объект реализует заданный набор методов с указанными сигнатурами. Примерно так были реализованы интерфейсы в microsoft ajax - http://www.cristiandarie.ro/asp-ajax/Person3.html. Хотя, в общем-то неудачный пример. Еще интерфейсы вроде есть в php. P.S. Это конечно, если оставить в стороне тот факт, что реализация этого дела поверх js - тот еще костыль |
еще раз, интерфейсы не нужны в языках с динамической типизацией. А головная боль может быть лишь у тех, кто пытается программировать на js, как будто это какой-нибудь java или что еще...
|
Может быть, вы тогда с такой же уверенностью скажете, зачем в языке с динамической типизацией конструкции instanceOf и typeof ?
|
прям в тупик загнали :) Может можете какой-нибудь реальный пример, где бы в js пригодились интерфейсы?
и очень интересует всем кроме меня известный факт про головные боли от взаимодействия объектов? |
Цитата:
|
Часовой пояс GMT +3, время: 04:54. |