Честно говоря я не понимаю этого восторга. JavaScript в текущей реализации позволяет использовать ООП и введение "class" ничего по сути не меняет. Вместо того чтобы просто расширить возможности, товарищи пытаются сделать из него второй Java
Шутите? Нет, это правда, конечно.
JavaScript в текущей реализации позволяет использовать ООП. Через задницу. Далеко не в полную мощь. Чтобы воспользоваться такой мелочью как инкапсуляция в текущей реализации нужно истрахать себе весь мозг.
Большая часть ООП в текущей реализации это обходные пути, позволяющие использовать ООП.
Видимо вы превратно понимаете термин "инкапсуляция".
Инкапсуляция, это собрание данных и обрабатывающего их кода в одном месте, а отнюдь, не private-protected-public
Не все с вами согласны (и я из их числа). Обратите внимание на "скрыть реализацию объекта от пользователя". Это важно)
Обсуждать хороша ли реализация ООП в языке, в котором сокрытие данных осуществляется через одно место (т.е. не штатными средствами), на мой взгляд, непродуктивно.
Сокрытие данных, там, где это необходимо, легко осуществляется через замыкания (штатное средство), а private-protected-public - путь языков со статической типизацией, не JS. Реализация полиморфизма через duck-typing - все хорошо.
На что обратить внимание? Я вам приведу десятки текстов где написано по разному и сам отредактирую википедию.
Главное, не то, что где-то написано, а главное те принципы, которые позволяют программировать объектно-ориентированно, то есть ориентироваться в своем коде на объекты. Сокрытие данных, это дополнительная фишка, местами достаточно удобная, но к самому ООП никакого отношения не имеющая.
Есть отличные ООП-языки, не позволяющие делать сокрытие вообще ни через одно место (например, Python), но это не мешает быть им предельно удобными и мощными в ООП-плане.
Согласен, погорячился. Настолько я убежден в том, что сокрытие данных провоцирует на хороший стиль программирования, что очень расстраиваюсь, когда пишу на языке, на котором этого нельзя.
Я почти всегда когда свойство новое объявляю, делаю его private. Мне такое сокрытие позволяет "отловить" необходимость рефакторингов в будущем. Сразу становится видно, что класс лезет не к своим данным и необходимо менять архитектуру.
К чему я, собственно: дело не в определениях, конечно, но мне действительно нехватает этого в языках, которые "полностью реализуют ООП". Рад, когда удается выбрать для проекта язык, который провоцирует писать в хорошем стиле.
Мне уже заминусовали за это карму, но я не знаю ни одного класса задач и мне не привели ни одной задачи, где ООП JavaScript 1 (прототипирование) имело бы какие-либо преимущества перед "классическим ООП".
А если таких преимуществ нет или класс задач ничтожно мал, то нет смысла использовать что-то другое и лучше отказаться от этого и перейти к подходу, к которому все привыки и который представляется людям естественным решением.
А так, конечно в JavaScript есть ООП, просто оно другое и... возможно стань prototype подход популярнее классического с классами и пр. мы бы плевались на какой-нибудь язык с классами без прототипирования. Так что на данный момент прототипный подход представляется менее удобным.
Классы в JS2 по сути меняют подход к программированию. Там не просто добавлено новое слово class, а сами классы стали статичными, к примеру, методы нельзя переопределять и такие свойства (метод по сути то же свойство) могут хранить только функции. В дополнение, появляются специальные атрибутов, которые определяют видимость и прочие свойства, например, readonly. Можно вернуться и к старому, и добавлять/удалять свойства на лету - но класс такого объекта должен быть помечен как dynamic (динамический). Меняется способ наследования. Добавляется множество ограничений. И т.д. и т.п.
забавно наблюдать развитие JavaScript )
Сейчас мне это очень напоминает развитие ActionScript в Flash. До ActionScript 2, как раз использовались конструкции такого типа:
function Foo() {
this.a = "a";
this.b = "b";
}
var myFoo = new Foo();
:)
Потом появился ActionScript 2 и тут появились class Foo, покеты и т.д. - эмуляция ООП
Интересно - JavaScript 3 тоже будет походить на ActionScript 3? :)
Если да, то это уже очень приближено к синтаксису Java...
Я к тому, что какими темпами развиваются братья, точнее интересно наблюдать их темп по скорости. ActionScript к стандарту ECMA идет малость быстрее :)
На своем веку я пережил три версии ActionScript (то что было до Flash 5 за язык наверно можно не считать). По ходу дела, сталкиваясь с JavaScript кардинальных изменений я не заметил, хотя в вопросах JavaScript, я не компетентен, что бы утверждать это на все 100. Честно, года полтора назад я был удивлен, что оказывается в JavaScript есть понятие prototype.
А еще я вспомнил историю, еще в тот момент когда только начинал учить Flash. В какой-то книжке, уже не помню какой, было сказано что ActionScript и Flash сам по себе, должны упростить жизнь web-разработчикам создающие анимацию на своих сайтах (типа забудьте JavaScript - не нужно кодить что бы создать "афигеннную менюшку", есть же flash!). :)
Да... Упростили (серьезно упростили, "web-разработчики" заполнили все flash баннерами и "афигеннными менюшками", мне честно как flash-разработчику больно было на это смотерть). И кстати больно смотреть как хабралюди, по большей своей части не любят flash, хотя и есть за что.
Теперь ActionScript 3 на голову выше своего старшего брата :)
И уже наверно проще на JavaScript чем на ActionScript 3 (имею в виду синтаксис и абстракцию подхода) :) А ведь начинал JavaScript раньше...
AS2 только синтаксичиский сахар, ничего нового. AS3 - и есть ECMAScript 4 ( aka JS 2.0) за исключением мелочей, т.к. девятый флеш вышел до утверждения стандарта :)
пишу на жаваскрипт, "стандартное" ООП не вкуриваю вообще... но вроде то, что выходит у меня из клавитуры, другие называют объектным подходом....
ну сделают ООП в жс более "стандартным"... разницы та... работать быстрее все равно не будет...лучше бы стандартизовали совмещение жс с штмлем - дабы не только производители браузеров жс движки писали...
Вам не кажется, что тогда к полной неразберихе с браузерами добавится полная неразбериха с имплементацией чужих движков? И потом, это же не такой плагин, который будет разрабатывать одной компанией, типа флеша или сильверлайта — это ж будет ад.
Почему один? Много. Хочется получить больше уровней в разработке - как в свое время софт отделился от железа... как софт поделился на прикладные программы и операционные системы... как появились скриптовые языки в прикладных программах и т.п. Веб и так достаточно слоожен... а дальше он бдует только сложнее и сложнее.
Наконец-то... теперь можно будет по-человечески писать все что угодно... Остается только надеятся на достойную реализацию и большую стандартизованность, чем нынешний JS... да ждать выхода в свет :-)
Web 2.0, встречай JavaScript 2.0!