ООП и JavaScript
Здравствуйте.
Недавно начал изучать JavaScript. Есть опыт С, C++, Java и то ли я такой, то ли лыжи не едут ... Что в JavaScript нет классов в смысле С++, Java? типа Код:
class JSClass { function JSClass(){ } это и есть типа класс? или я чего-то пропустил? |
Цитата:
В JS есть объекты... http://javascript.ru/object Вот про ОПП https://learn.javascript.ru/oop https://learn.javascript.ru/prototypes |
Цитата:
переменные и функции. Цитата:
кстати, а какой АТД(абстрактный тип данных в основе) хэш таблица или дерево какое? если их объединять можно, то дерево Цитата:
почему класс называется function() ? function CoffeeMachine(power, capacity) { var waterAmount = 0; this.waterAmount = function(amount) { функция, внутри которой есть переменная, которая ссылаясь на функцию, которой она принадлежит, от безымянной функции получает значение и при этом надо еще все это "динамически" создать var coffeeMachine = new CoffeeMachine(1000, 500);притом что delete нет, а про утечки памяти где-то проскакивало, но еще не читал массивы работают как очереди на основе массивов FIFO :help: сортировки поди пузырьковые?:cray: |
|
nerv_, это именно то, о чем я и спрашивал.
только опять же:blink: Цитата:
Цитата:
почему обычные переменные то нельзя было в класс добавить? ладно будем посмотреть дальше |
Ostic,
геттеры/сеттеры тебе в помощь... |
Цитата:
|
Цитата:
|
warren buffet,
А какой тогда смысл в классах? Если у объектов будет разный набор свойств. Цитата:
|
Цитата:
|
Ostic,
В смысле плюсов и жабы нет, собственно, в плюсах и жабе ООП вообще нет, там нечто, что *принято* называть ООП, по недоразумению. Алан Кей, как известно, не это имел в виду. Соответственно, о наличии там классов тоже как то с натяжкой можно говорить. Короче, то что в плюсах и жабе принято называть классами -- это миксины по сути. |
Цитата:
|
Цитата:
такое в глаза надо говорить, герой компьютерный. Цитата:
Цитата:
хотя после того как в JS function ... Цитата:
я вам больше скажу:"там вообще кроме транзисторов и прочих нанометровых элементов ничего нет..." давайте об этом не будем, а то уйдем далеко в мат логику и теорию КА. |
Я не супер спец но мне TypeScript более человекопонятный и логичный - есть класс, в нем есть конструктор, есть методы, а в JS все понарошку, типа давай напишем function() и понарошку назовем это классом или конструктором, другую function тоже понарошку назовем функцией, более того - можно написать третий раз function и также понарошку назвать методом.
Это не плохо и не хорошо если привыкнуть. Тем более и привыкать то особо не надо - запомнил и все дела. Ну или забыть чему тебя Javы и другие CLASSные языки учили и принять немного другой подход JS. |
Bond, js что-то вроде https://en.wikipedia.org/wiki/Value_object или атома водорода из которого непостижимым образом можно сделать золото и бриллианты. А твое мировоззрение креационистское, типа бог создал класс и увидел что это хорошо. На второй день он создал конструктор, на третий деструктор, затем допилил геттеры и сеттеры и в пятницу забухал и бухает до сих пор.
|
Цитата:
|
Цитата:
понятно же что создавая автоматическую переменную Код:
{int i;} конструкции типа (func)(), в которые вкладывается совсем разные смыслы... в том же Си там сортировки, случайные числа (можно по терверу эксперименты ставить), хэш-функции самописанные, деревья(красно-черные и ван эмде боаса), очереди (хоть на списках, хоть на массивах... биномиальные) и т.д. и т.д. и главное четко понимаешь как это работает, сколько памяти потребляет. а js это совсем иное: более начетническое, тк если не знаешь, как свойство или метод называется, то "давай, дасвиданья"... сегодня читаю про jQuery. сначала я не мог понять почему такой ажиотаж вокруг jQ, тк глядя на чистый код и глядя на jQ поначалу подумал:"зачем такое городить? надо писать на "чистом" js!" но прочитав несколько глав испытал неописуемое облегчение. имхо вообще все к jQ придет и через пару лет может и вообще кто интерпретатор напишет(сохранив прежний синтаксис) я бы на это ставку делал. |
Цитата:
|
Ostic,
jQuery всего лишь библиотека, в философию JS ничего нового не приносит, просто добавляет некоторого удобства работы с DOM и Ajax, кроссбраузерности и на ООП не влияет. Вот фреймворки теоретически может и могли бы повлиять или по крайней мере могли бы направить в другой русло, а библиотека есть библиотека - всего лишь прицепчик с удобствами который максимум что сможет сделать - это добавить пару тройку функций в новый стандарт JS |
Bond,
То что реально и кардинально может изменить(в тч улучшить, сделать мощней) ООП в JS -- это Proxy. Это, фактически, ключ к созданию своей собственной ООП-модели, синтаксически совместимой с нативным синтаксисом |
Цитата:
|
Цитата:
Походу ты изучаешь программирование на си и жс. А надо на паскале. |
warren buffet,
this |
Ты же знаешь, что я тупой. Мне надо пальцем показать. Покажи.
|
warren buffet,
лексическое(ранее) связывание это эквивалент замыканий или выражений с bind. Функция таскает с собой под ковром окружение, и при любом вызове связывается только с ним. При позднем связывании функция резольвит переменные только в момент вызова, независимо от лексического окружения. o = {a: 1} o.early = function(){return this.a}.bind(o) o.late = function(){return this.a} o1 = {a: 100, early: o.early, late: o.late} alert([o1.early(), o1.late()]) Сами по себе понятия эти самоочевидны: функция связывается в момент определения(создания) или в момент вызова. Фактически, термин "позднее связывание" эквивалентен понятию "динамическое связывание". Есть языки, где позднее связывание дефолтно(не требует ключевого слова this, self, etc). Языки в которых оно отсутствует вообще(например, питон, жаба), не являются ООП-языками в том смысле, в котором трактовал ООП Алан Кей. На позднем связывания построены принципы наследования делегированием, в тч и в JS |
Спасибо. С ходу нихуя не понял, надо обдумать. )))
|
Часовой пояс GMT +3, время: 13:48. |