Объектно-ориентированные концепции Java в Javascript - PullRequest
9 голосов
/ 15 февраля 2012

Я давно использую Java, и довольно долгое время занимался веб-разработкой с использованием GWT (Google Web Toolkit).Прелесть этого в том, что у меня были свои объектно-ориентированные конструкции Java, и я не буду беспокоиться о том, как они будут переведены в GWT, - пусть Google позаботится об этом.Мое знание Javascript было достаточным, но не настолько, чтобы я мог заниматься с ним тяжелой веб-разработкой.Позже я решил, что мне нужно глубже и более глубоко понять Javascript, и это были настоящие американские горки - как раз в то время, когда я думаю, что что-то получаю, что-то приходит и доказывает мне, что я был неправ - что я просто неправильно понял,

Что может быть лучше, чем высказать свое мнение, чем stackoverflow: я умоляю о некоторых ресурсах и указателях на то, что будет Javascript, эквивалентным некоторым из следующих концепций Java:

Class
instance of a class - object
Member variables
Getters
Setters
Abstract Class
Interface
Inheritance
Access Modifiers
Constructors

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

Ответы [ 8 ]

6 голосов
/ 15 февраля 2012

Я думаю, вам в основном нужно понимать, что Javascript - это чистый язык ООП, но у него нет классов! ... Для программиста на Java это просто шок, и вам нужно время, чтобы разобраться с этим, но это довольно мощная парадигма.

Это видео от Дугласа Крокфорда, парня, который помогал создавать Javascript, блестящий для новых программистов на Javascript

http://www.youtube.com/watch?v=v2ifWcnQs6M

5 голосов
/ 15 февраля 2012

Дуглас Крокфорд объясняет, как очень хорошо имитировать эти объектно-ориентированные функции. Его книга JavaScript: хорошие части - это книга, которую, я думаю, должен прочитать каждый, и объясняющая, как извлечь максимум из часто сбивающих с толку функций JavaScript.

Попробуйте этот краткий учебник для его основного способа получить методы и свойства частного класса через замыкания. Также этот урок покажет вам, как добиться классического наследования.

3 голосов
/ 22 февраля 2012

JavaScript - это чистый ОО-язык, однако в нем отсутствуют некоторые концепции классов ООП-языков, таких как Java или C #. Однако хорошей новостью является то, что хорошие люди ECMA работают над этим вопросом, чтобы привести такие концепции ОО, как абстракция, классы, пространство имен, наследование, свойство ... в JavaScript

У Питера Мишо есть хорошее объяснение этому

3 голосов
/ 15 февраля 2012

Я был в том же квесте, что и вы, но мне пришлось собирать и собирать знания повсюду.

Существует множество отличных постов по всему стеку для всех этих тем, а затем есть MDN Я бы также порекомендовал заглянуть в источник популярных библиотек, таких как jquery.См. Это средство просмотра исходного кода http://james.padolsey.com/jquery/

Это BRILLIANT интерактивное учебное пособие великого Джона Резига:
http://ejohn.org/apps/learn/

Вот несколько очень хороших сообщений SO, которые помогли мне лучше понять JS:

Как «правильно» создать пользовательский объект в JavaScript?
Что такое ключевое слово «new» в JavaScript?
Почему используется прототипирование JavaScript? Почему необходимо установить конструктор прототипа?
Вызвать базовый метод в Javascript, используя функциональное наследование Дугласа Крокфорда
СправкаПонимание jQuery jQuery.fn.init Почему init в fn
Что означает jQuery.fn?
Почему «это» разрешение настолько особенное в JavaScript?
В чем разница между вызовом и применением?
Динамический вызов функции (применяется)
JavaScript форматирование данных / симпатичный принтер
Проверка наличия ключа в объекте JavaScript?

HВот некоторые сообщения о причудливости javascript и материалах, о которых вы не знали:

Возможно ли отразить аргументы функции Javascript?
аргументы функции
Что такое !!(не не) ли оператор в JavaScript?
Как работает этот синтаксис JavaScript / JQuery: (функция (окно, неопределенное) {}) (окно)?
Какиеоператор сравнения (== vs ===) должен использоваться в сравнениях JavaScript? Поведение оператора удаления в JavaScript
var myArray = [], name;?
Почему нулевой объект и в чем разница между нулевым и неопределенным?
Проверка на нулевое / неопределенное в JavaScript
Что означает восклицательный знакделать перед функцией?

3 голосов
/ 15 февраля 2012

Что ж, основное правило в JavaScript состоит в том, что он позволяет вам делать практически все.Модификаторов доступа нет.Поскольку JavaScript не сильно мешает, такие вещи, как абстрактный класс, просто не имеют смысла.Вы всегда можете создать его экземпляр.

Неопределенно похожее на класс поведение происходит от Objects, и вы можете получить поведение, похожее на конструктор, используя прототип.http://www.javascriptkit.com/javatutors/proto.shtml

Переменные-члены похожи, но нетипизированы и могут также содержать функции и данные.

В JavaScript вам нужна личная дисциплина и строгие соглашения по коду для симуляции любой из этих вещей, но язык вам немного не поможет.Он очень гибок, что означает, что он не мешает вам, но он также дает вам много веревки, чтобы повеситься.

Лучше подходить к нему как к совершенно другому языку.Не пытайтесь связать его с Java, потому что он во многом принципиально отличается.

Именованная вещь является наиболее связанной частью всего этого, что создает путаницу ...

1 голос
/ 22 февраля 2012

У меня был шок, очень похожий на тот, который вы испытали при попытке войти в Javascript.Javascript хорошие роли Дугласа Крокфорда и его сайта http://crockford.com/ оказали мне огромную помощь.

1 голос
/ 15 февраля 2012

Для получения некоторой информации о области видимости переменных JavaScript посмотрите эту статью.Он объясняет основы создания открытых, защищенных и закрытых переменных для прототипов объектов.http://www.anzaan.com/2009/05/javascript-variable-scope-private-protected-and-public/

1 голос
/ 15 февраля 2012

Я могу представить пару ссылок, которые ответят на большинство из этих вопросов, включая явное заявление о том, что JavaScript является свободно типизированным, динамическим языком по сравнению с Java как строго типизированным, статическим языком. Я чувствую, что это тип прямой аналогии, которую вы ищете.

Многие общие вопросы из первых пяти перечисленных пунктов будут разбросаны по ним с кратким чтением раздела " Работа с объектами " Руководства JavaScript в Сеть разработчиков Mozilla . (Класс, экземпляр класса - объект, переменные-члены, геттеры, сеттеры)

Вторая группа элементов, я думаю, очень хорошо объяснена на этом сайте от Дугласа Крокфорда, который написал книгу О'Рейли "Javascript: Хорошие части", а также инструмент кода JSLint. (Абстрактный класс, Интерфейс, Наследование, Модификаторы доступа, Конструкторы) Крокфорд проводит очень прямые аналогии между Java и JavaScript на странице, которая описывает, как JavaScript поддерживает не только классическое наследование, но и другие шаблоны повторного использования кода .

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